<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman,new york,times,serif;font-size:12pt"><div>IIRC the way to escape [ in regular expressions is [[] not \[.<br>Similarly []] not \].<br><br>Never tried with erlang re application though.<br></div><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"><br><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"><font size="2" face="Tahoma"><hr size="1"><b><span style="font-weight: bold;">From:</span></b> David Mitchell <monch1962@gmail.com><br><b><span style="font-weight: bold;">To:</span></b> erlang-questions Questions <erlang-questions@erlang.org><br><b><span style="font-weight: bold;">Sent:</span></b> Monday, 30 March, 2009 2:19:28 PM<br><b><span style="font-weight: bold;">Subject:</span></b> [erlang-questions] Why is it necessary to "double-escape" [ characters in regular
 expressions?<br></font><br>Hello group,<div><br></div><div>Running 5.6.5 under Windows...</div><div><br></div><div>I've got a bunch of code that's "almost but not quite syntactically correct" XML, and I'm trying to convert it to valid XML.  Part of this process involves removing some invalid CDATA tags.<br>
</div><div><br></div><div>My code fragment:</div><div>  re:replace("abc123", "<!\[CDATA\[<", "<", [{return, list}]).</div><div>is giving me "exception error: bad argument in function re:replace/4.</div>
<div><br></div><div>Trial and error shows that removing the escaped [ characters:</div><div>  re:replace("abc123 <![CDATA[< abc123", "<!CDATA<", "<" [{return, list}]).</div><div>
works as expected, but it's obviously not what I want.</div><div><br></div><div>However, "double-escaping" the [ characters (by adding a second \ prior to the [ character) does exactly what I want:</div><div>
  re:replace("abc123 <![CDATA[< abc123", "<!\\[CDATA\\[<", "<", [{return, list}])</div><div>returns "abc123 < abc123", which is the result I'm after.</div><div>
<br></div><div>In this context, I guess it's conceivable that the [ character can be misinterpreted in two distinct ways in a regular expression:</div><div>- it could denote the start of an Erlang list</div><div>- it could denote the start of a character grouping within a regular expression</div>
<div>However, I didn't expect that "double escaping" it would be the solution to my problem.</div><div><br></div><div>Is this expected behaviour, or some sort of anomaly?  In any case, sending this email to the mailing list should help out the next person who falls into this trap, but who can use Google to track down the solution...</div>
<div><br></div><div>Regards</div><div><br></div><div>David Mitchell</div>
</div></div></div><br>
      <hr size=1>Enjoy a better web experience. Upgrade to the new Internet Explorer 8 optimised for Yahoo!7. <a href="http://au.rd.yahoo.com/search/ie8/mailtagline/*http://us.lrd.yahoo.com/_ylc=X3oDMTJxbnQwdTJhBF9zAzIxNDIwMjU2NTkEdG1fZG1lY2gDVGV4dCBMaW5rBHRtX2xuawNVMTEwMzQ0OAR0bV9uZXQDWWFob28hBHRtX3BvcwN0YWdsaW5lBHRtX3BwdHkDYXVueg--/SIG=11k6t9t1c/**http://downloads.yahoo.com/au/internetexplorer/" target=_blank>Get it now.</a>.</body></html>