消极的外观正则表达式

时间:2013-01-03 08:39:16

标签: php regex

我有以下字符串

.proxy.com  TRUE    /   FALSE   0   COOKIE%253BCartID%253B%252F%253Bwww.proxy.com   1914104745%253B

以及以下正则表达式

[a-zA-Z0-9\%]{14,15}

我想只匹配1914104745%253B,但它正在拿起COOKIE%253BID,我试图做这样的否定断言

[a-zA-Z0-9\%]{14,15}[?!COOKIE]

但这不起作用

任何人都可以帮助这个正则表达式吗?

4 个答案:

答案 0 :(得分:2)

为什么不用[a-zA-Z0-9%]{14,15}$

锚定到字符串的末尾
$str=".proxy.com  TRUE    /   FALSE   0   COOKIE%253BCartID%253B%252F%253Bwww.proxy.com   1914104745%253B";
preg_match('/[a-zA-Z0-9%]{14,15}$/',$str,$match); 
echo $match[0];

>>> 1914104745%253B

如果要匹配的字符串部分是严格格式化的,您可以使用\d{10}%\d{3}[A-Z]$之类的内容,如果匹配并不总是在$,则可以删除1914104745%253B字符串,在您的示例中只会匹配%

注意:{{1}}不需要转义。

答案 1 :(得分:1)

试试这个

(?<=\s)[\w%]{14,15}(?:(?=\s)|$)

Demo

答案 2 :(得分:0)

Lookaheads使用圆括号,而不是方括号。但我不认为自己的前瞻会有所帮助:

(?!COOKIE)[a-zA-Z0-9\%]{14,15}

会阻止它与COOKIE%253BCart匹配,但它会简单地匹配OOKIE%253BCartI。使用尾随$将匹配锚定在行的末尾可能是最简单的方法。

答案 3 :(得分:0)

您是否只是想在线上获取最后一串非空白字符?然后使用此

(\S+)$

您还可以使用preg_split拆分空白并获取它返回的数组的最后一个元素。