使用PHP8,我正在努力找出如何有条件地匹配一些可能出现或可能不出现在字符串中的键。我想匹配两个
-----------key=xyz---------------
和
--------------------------
破折号("-")可以是任何非空格字符,仅在这里用于更清晰地阅读示例。
正则表达式匹配"key=…"如果它的包含群是贪婪的,如下所示。但这是不够的,因为完全匹配会失败。缺少主题字符串。
/
(S*)?
(key=(?<foundkey>[[:alnum:]-]*))
S*
/x
如果捕获组不是贪心的,那么正则表达式就忽略键匹配任何"key=xyz">
/
(S*)?
(key=(?<foundkey>[[:alnum:]-]*))?
S*
/x
我试着在这个regex101示例中调试,但无法找出它。
我整理了这个使用多个正则表达式,但希望有人可以帮助解决我的误解,所以我知道如何使这个工作作为一个单一的正则表达式。由于
您可以使用:
/
^
S*?
(?:
key=(?<foundkey>w+)
S*
)?
$
/xm
RegEx演示
正则表达式分解:
^
: StartS*?
:匹配0个或多个空格非贪婪(?:
:开始向前看key=(?<foundkey>w+)
:匹配key=
文本后面跟着1+单词字符作为捕获组foundkey
S*
:匹配0个或多个空白
)?
:结束向前看。?
使其成为可选匹配$
;