使用PHP 8时,我一直在努力弄清楚如何有条件地匹配某个可能出现在字符串中也可能不出现的键。
-----------key=xyz---------------
以及
--------------------------
破折号(“-”)可以是任何非空格字符,此处仅用于更清晰的阅读示例。
正则表达式匹配“key=...”,如果它的包含组是贪婪的,如下所示。但这是不够的,因为完全匹配将失败,因为“key=xyz”缺少主题字符串。
/
(\S*)?
(key\=(?<foundkey>[[:alnum:]-]*))
\S*
/x
如果捕获组是非贪婪,则正则表达式将忽略与任何“key=xyz”匹配的键
/
(\S*)?
(key\=(?<foundkey>[[:alnum:]-]*))?
\S*
/x
我试着在这个regex101 example中调试,但无法解决它。
我使用多个正则表达式整理了这个,但是希望有人能帮助解决我的误解,这样我就知道如何使这个作为一个正则表达式工作。谢谢
1条答案
按热度按时间nuypyhwy1#
您可以使用:
RegEx Demo
^
:开始\S*?
:匹配0个或多个非贪婪空格(?:
:开始预读key=(?<foundkey>\w+)
:匹配key=
文本(后跟1+单词字符)作为捕获组foundkey
\S*
:匹配0个或多个空格)?
:结束前瞻。?
使其成为可选匹配$
;结束