[LON-CAPA-users] Regular expressions in string response

Gerd Kortemeyer lon-capa-users@mail.lon-capa.org
Tue, 1 May 2007 14:31:24 -0400


Hi,

On May 1, 2007, at 2:17 PM, Robert_Brewington@er.monroe.edu wrote:

>  I want the answer
> to recognize a chemical equation; the problem is, the kids put  
> extra or no
> blanks randomly between the compound formulas. For example, the answer
>
> 2Ag + Ca(NO3)2 -> 2AgNO3 + Ca
>
> should also recognize
>
> 2Ag   +   Ca(NO3)2   -> 2AgNO3    + Ca
> 2Ag+Ca(NO3)2->2AgNO3+Ca
> Ca(NO3)2 + 2Ag -> 2AgNO3 + Ca
> 2Ag + Ca(NO3)2 -> Ca + 2AgNO3
>
> and so on.


Sounds like a job for chemical reaction response ... did that somehow  
not work?

If there was a problem, it seems we should fix that response type.

>
> For the moment, I am just trying to get it to accept the first  
> answer. I
> can get the pipe part to work once this is right. I have my regular
> expression as
>
> $regexpans = '/^(2Ag\s*\+\s*Ca(NO3)2\s*->\s*2AgNO3\s*\+\s*Ca)\s*$/';
>
> where I backslashed the "+" because the regular expression routine  
> thought
> it was part of the \s* construct.

Correct.


> This expression is not working, though.
> With or without spaces, no answer is accepted. I assume I am doing
> something simple wrong:(

I think you need to escape the brackets around "NO3" in Ca(NO3), i.e.,

\(NO3\)

Also, I am not sure about the "-" and the ">", which is something  
else I routinely escape, just to be on the safe side.

But again, chemresponse should handle this much more elegantly and  
right out of the box.

- Gerd.