显式规则:
1.该字符串有两个部分,用分号分隔。
1.第一部分允许有字母数字字符,破折号,下划线和点
1.字符串的第二部分包含键-值对,其中key使用等号设置为它的值,这些对用逗号分隔,我们不知道它们事先重复了多少次
示例:
blahblahblah;first=1,second=two
bl.hbl-hbl_hbl4hbl4h;first=1,second=two,third=thr33
到目前为止,我提出的最好的是([A-Za-z1-9_\-\.]+);(((.+?)(?:,|$))+)
,这显然是不正确的。我不擅长用正则表达式编写lookaheads、lookbehinds和其他相对高级的东西,但我希望有一个正则表达式解决这个问题。
如果regex引擎很重要的话,我在PHP8.1中使用的是Perl兼容的regex引擎
1条答案
按热度按时间42fyovps1#
你可以尝试使用以下正则表达式:
正则表达式说明:
^
:字符串的开始([\w.-]+)
:第一个字符串,由字母数字字符、下划线、破折号和点组成;
:分号([A-Za-z]\w*=\w+(?:,[A-Za-z]\w*=\w+)*)
:键值对[A-Za-z]
:字母字符\w+
:字母数字字符序列=
\w+
:字母数字字符序列(?:,[A-Za-z]\w+=\w+)*
:非捕获组,包含可选的下一个键值对,
:逗号[A-Za-z]
:字母字符\w+
:字母数字字符序列=
\w+
:字母数字字符序列$
:字符串结束查看演示here。