我有以下字符串
.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]
但这不起作用
任何人都可以帮助这个正则表达式吗?
答案 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)
答案 2 :(得分:0)
Lookaheads使用圆括号,而不是方括号。但我不认为自己的前瞻会有所帮助:
(?!COOKIE)[a-zA-Z0-9\%]{14,15}
会阻止它与COOKIE%253BCart
匹配,但它会简单地匹配OOKIE%253BCartI
。使用尾随$
将匹配锚定在行的末尾可能是最简单的方法。
答案 3 :(得分:0)
您是否只是想在线上获取最后一串非空白字符?然后使用此
(\S+)$
您还可以使用preg_split
拆分空白并获取它返回的数组的最后一个元素。