正则表达式仅匹配非循环字符串

时间:2011-03-12 22:27:01

标签: php regex escaping

我一直在抨击这个人一段时间。我需要一个正则表达式才能匹配字符串,如果它没有被转义。例如,此正则表达式需要匹配<string>\\<string>,但不匹配\<string>,以及它之前的任意数量的转义(因此,匹配偶数转义,但不是奇数数)。

理想情况下,所有内容都无关紧要,所以任何人都可以使用我正在寻找的这个精彩的小正则表达式,可以在任何表达式前打耳机,只返回正确的非转义字符串。这个正则表达式必须在PHP中运行。

理论上,这应该适用于前两个级别的转义,但它不会:

(?<!\\(?<!\\\\))

此外,该方法必须非常大才能处理每个可能长度的转义字符。

更具体地说,我在preg_replace()中使用这个正则表达式。这是为了使quake3 Arena玩家别名脱色,使用另一个正则表达式来匹配着色字符串。基本上,我正在寻找一个匹配^<alphanumeric-char>\\^<alphanumeric-char>的正则表达式,而不是\^<alphanumeric-char>

一个例子:

$find = "^3Foo^7bAR\^7kicks\\^bass";

$string = preg_replace('<regex>', '', $find);

应该返回$string = "Foobar\^7kicks\ass"

1 个答案:

答案 0 :(得分:2)

'~\\\\.(*SKIP)(*FAIL)|<string>~'

简洁明了。