繁体   English   中英

负面环视正则表达式

[英]negative lookaround 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]

但这不起作用

有人可以帮忙这个正则表达式吗?

为什么不只使用[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}[AZ]$ ,你可以删除$如果比赛不会总是在字符串的结尾,在您的示例中,只有1914104745%253B会被匹配。

注意: %不需要转义。

尝试这个

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

演示版

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

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

可以防止它与COOKIE%253BCart匹配,但是它将仅与OOKIE%253BCartI匹配。 使用结尾的$将匹配项固定在行尾,可能是最简单的方法。

您是否只是在尝试获取行上非空格字符的最后一个字符串? 然后用这个

(\S+)$

您还可以使用preg_splitpreg_split进行拆分,并获取它返回的数组的最后一个元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM