正则表达式匹配{{>(lookup。'superman')}}

时间:2019-09-30 13:55:46

标签: php regex

我需要正则表达式,它会导致以下结果

给出此符号:

{{> (lookup. 'needle')}}

Tt返回结果:

["needle"]

我尝试过这个,但是它匹配所有{{>\(.(.+?)}}

2 个答案:

答案 0 :(得分:1)

您可以利用捕获组,而不是非贪婪的量词.+?来利用negated character class

{{>\h*\([^(']+'([^')]+)'\)}}
  • {{>匹配{{>
  • \h*匹配0+个水平空白字符(或\h+匹配1个或更多)
  • \([^(']+匹配(,然后匹配除('之外的任何字符的1+倍
  • '(匹配'并开始捕获第1组
    • [^')]+匹配除')以外的任意字符1倍以上
  • )'关闭组1并匹配'
  • \)}}匹配)}}

Regex demo

在替换使用中

["$1"]

输出

["needle"]

修改

如果lookup部分应该是静态的,则可以将模式更新为:

{{>\h*\(lookup[^']+'([^')]+)'\)}}

Regex demo

答案 1 :(得分:0)

如果符号将与书写的符号完全相同,{{> \(lookup\s*\. '(.*?)'\)}}应该可以解决您的问题。它会查找所有字符的文字版本,然后使用捕获组仅收集'标记之间的文本。 (请注意,如果捕获文本包含'标记,则需要更改此正则表达式。)

编辑:正则表达式现在可以匹配lookup.之间的任意数量的空格

Try it here!