2

正则表达式有问题(它们不是我的强项)。我正在尝试匹配 {{ 和 }} 之间的所有字符串,但是如果一组括号出现在同一行上,则将其视为单个匹配...示例:

$string = "
  Hello, kind sir
  {{SHOULD_MATCH1}} {{SHOULD_MATCH2}}
  welcome to
  {{SHOULD_MATCH3}}
  ";

preg_match_all("/{{(.*)}}/", $string, $matches);

var_dump($matches); // returns arrays with 2 results instead of 3

返回:

array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(35) "{{SHOULD_MATCH1}} {{SHOULD_MATCH2}}"
    [1]=>
    string(17) "{{SHOULD_MATCH3}}"
  }
  [1]=>
  array(2) {
    [0]=>
    string(31) "SHOULD_MATCH1}} {{SHOULD_MATCH2"
    [1]=>
    string(13) "SHOULD_MATCH3"
  }
}

有什么帮助吗?谢谢!

4

2 回答 2

5

用非贪婪形式替换*量词。*?

这将使其尽可能少地匹配,同时仍然允许表达式作为一个整体进行匹配,这与其当前的尽可能匹配的行为不同。

于 2013-01-14T22:50:33.183 回答
1

您可以使用以下模式之一。

  1. {{(.+?)}
  2. {{([^}]+)
  3. {{(\w+)
  4. {{([[:digit:][:upper:]_]+)
  5. {{([\p{Lu}\p{N}_]+)
于 2013-01-14T22:56:48.600 回答