正则表达式挑战:不能使用'^'

时间:2009-11-18 11:31:36

标签: regex

长话短说,我正在使用一个带有导致崩溃的bug的库,如果我使用带括号后的插入符号的正则表达式(例如,正则表达式[^ a])。正在处理这个错误,并且切换库不是一个简单的选择,我希望能够在现在和错误修复之间继续工作。

因此,我需要在不使用插入符的情况下表达以下两个正则表达式:

[^'] and [^"]

可以这样做吗?如果是这样,怎么样?现在可以接受一个包含所有ascii字符的正则表达式,但我正在使用unicode,因此这不是一个不漏水的解决方法。

4 个答案:

答案 0 :(得分:5)

是的,试试:

(?!['"]).

我假设您的正则表达式库支持展望未来。

它实际上是做什么的:

(?!      # start negative look ahead
  ['"]   #   match a single- or double quote
)        # stop negative look ahead
.        # match any character other than line breaks

用简单的英语说:“如果在向前看时,单个或双引号不能被”看到“,则匹配任何字符(除了换行符)”。

答案 1 :(得分:1)

如果用其他东西替换'char(比如说,0xdeadbeef之类的东西)然后重新替换它呢?

答案 2 :(得分:0)

您需要告诉我们库支持哪种类型的正则表达式。根据库的不同,您可能会使用类似[\x00-!#-&(-\U0010ffff]的内容。它还取决于您使用的库是否在匹配正则表达式时使用UTF-16和代理项对,或者它是否正确匹配BMP外的unicode字符。

答案 3 :(得分:0)

如果您只是尝试匹配/删除/替换非单引号或双引号的字符,您可能会发现简单地迭代字符串中的字符并执行必要的操作更容易,更快捷。

最终,正则表达式引擎以这种方式运行,因此使用循环实现简单替换有时也会更有效。