【发布时间】:2018-01-24 21:16:00
【问题描述】:
我搜索了答案,但没有找到任何相关信息。 希望你能帮助我解决我的问题。
所以我尝试基于字符串末尾的捕获组在具有先行条件的字符串之后进行搜索。 这意味着如果最后的捕获组匹配,则使条件组与某些东西匹配,如果最后的捕获组不匹配,则与其他东西匹配。
(?:((?(?=ls)yes|no))\${(?:(?P<type>VAR)\s+)([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*\=\s*(\$\{CALL\s+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\s*\}|\"[^\"]*\"|'[^']*'|[0-9]*|(?:[fF]alse|[tT]rue))\s*\}(?<ls>[^\s]{1}))
输入:
${VAR foo="What"}x
${VAR foo="What"}
yes${VAR foo="What"}
no${VAR foo="What"}x
如你所见,如果结尾有东西,只要不是 \s,它就会捕获单词“no”,但如果它什么都没有,它不会捕获单词“yes”。
【问题讨论】:
-
(?(?=ls)yes|no)从不匹配“是”。条件表示如果接下来的两个直接字符是ls,则匹配yes。不可能!
标签: php regex conditional pcre capture-group