php 正则表达式检测此模式:something =something,something=something...不知多少次

bd1hkmkf  于 2023-05-27  发布在  PHP
关注(0)|答案(1)|浏览(75)

显式规则:

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引擎

42fyovps

42fyovps1#

你可以尝试使用以下正则表达式:

^([\w.-]+);([A-Za-z]\w*=\w+(?:,[A-Za-z]\w*=\w+)*)$

正则表达式说明

  • ^:字符串的开始
  • ([\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

相关问题