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