-1

我有以下字符串

.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

4 回答 4

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

注意:%不需要转义。

于 2013-01-03T08:43:07.877 回答
1

试试这个

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

演示

于 2013-01-03T08:48:10.093 回答
0

前瞻使用圆括号,而不是方括号。但我不认为单靠前瞻会有所帮助:

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

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

于 2013-01-03T08:52:51.623 回答
0

您是否只是想获取最后一行非空白字符?然后用这个

(\S+)$

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

于 2013-01-03T20:17:02.247 回答