2013-03-20 155 views
1

我需要嵌入用户输入我的正则表达式,所以它需要为任何正则表达式特殊字符转义,我不知道什么字符串将是。转义正则表达式特殊字符为tr1 ::正则表达式

它会像

string pattern = "\\d+ " + myEscapeFunction(userData); 

我需要哪个特殊字符逃跑?或者是否有与Qt的QRegExp::escape等效的功能?

+0

我不确定,如果有一个通用的解决方案,因为它取决于表达标准。例如(AFAIR)需要一些引擎]可以逃脱,有些则不需要。你应该看看你的标准逃逸字符串的规则,并做一些字符串替换...... – Spook 2013-03-20 12:37:27

+0

这似乎是这种情况。现在我想到了,tr1 :: regex允许在运行时设置表达式标准。我认为它默认为ECMAscript。 – sashoalm 2013-03-20 12:39:59

回答

3

您必须转义的字符列表取决于您正在使用的各种正则表达式语法中的哪一种。如果您使用的是默认ECMAScript,则看起来好像QRegExp::escape文档中的列表是一个很好的开始。它说:

特殊字符是$,(,),*,+,。,?,[,]],^,{,|,和}。

该列表由于某种原因遗漏了\

但比它稍微复杂一些,因为在方括号内,除\]之外的字符都不是特殊字符,并且\]必须保持未转义状态。

此外,在(之后出现的?并不特别。例如,在(?=x)?应该而不是被转义。

我认为这是相当多的,但我没有把足够的时间放在这个确定的。