2011-03-12 163 views
0

我一直在抨击我的头对此一段时间了。我需要一个正则表达式来匹配一个字符串,只要它没有被转义。例如,这个正则表达式需要匹配<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"

+0

你如何使用这个正则表达式? preg_match_all? preg_replace函数?你能提供一个代码示例吗? – 2011-03-12 22:32:18

+0

您需要用分隔符(通常为'/')围绕模式,以便在第二个分隔符后添加修饰符。 – 2011-03-12 22:46:14

+0

不应该是'FoobAR \^7kicksbass'吗? – Gumbo 2011-03-12 22:50:25

回答

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

简而言之,

+0

哦你PCRE向导! – Gumbo 2011-03-12 23:19:14

+0

最近的一个呢!我只需要再次运行字符串并清除//的。 – Dakota 2011-03-12 23:37:33