Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex perl正则表达式_Regex_Perl - Fatal编程技术网

Regex perl正则表达式

Regex perl正则表达式,regex,perl,Regex,Perl,我有一些这种格式的网址。有些URL包含&abc=4,有些则不包含 xxxxxxxxxxxxxxxxxxxxxxxxxxx&abc=4 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&abc=4 xxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 这里xxxxxxxxxxxxxxxxxx是字符串 我想匹配只有xxxxxxxxxxxx而没有&abc=4的URL(意思是我想获得这些类型的URL,只有xxxxx

我有一些这种格式的网址。有些URL包含
&abc=4
,有些则不包含

xxxxxxxxxxxxxxxxxxxxxxxxxxx&abc=4
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&abc=4
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
这里
xxxxxxxxxxxxxxxxxx
是字符串

我想匹配只有
xxxxxxxxxxxx
而没有
&abc=4
的URL(意思是我想获得这些类型的URL,只有
xxxxxxxx
xxxxxxxx
xxx

我知道如何编写与整个url匹配的正则表达式。例如:
/x.*abc=4/

但是如何编写只匹配
xxxxxxxxx
而不匹配
&abc=4
的正则表达式呢。表格为:

(?<![&?]abc=4)
(?

(这也将排除
?abc=4
)。

假设您的URL位于每一行,您可以使用:

([^&]+?)
这基本上会匹配到第一个实例&

正如@Benoit所说,您可以使用零宽度表达式来否定查询字符串的捕获,但您需要的是正向前瞻,而不是反向前瞻,语法示例如下:

(?=(&[^=]+?\d+)+)
正如你所看到的,这会使表情复杂化


希望这有帮助。

我会使用否定的前瞻断言(前瞻不允许遵循我的模式的内容)

此模式将匹配任何不以
&abc=4结尾的字符串


你可以在这里在线验证:

首先检查是否与xxxx匹配,然后检查是否缺少abc=4可能你也不想要
?abc=4
可能你也不想要;abc=4这是一个消极的前瞻,所以你要求的是所有事情,直到它后面不会有&=444点。一个积极的前瞻d允许你说出每一件事,然后是这个。
^(?!.*&abc=4$).*$