简化&修复正则表达式

时间:2014-06-27 07:00:30

标签: php regex

我是处理正则表达式的新手,并且想知道以下正则表达式是否可以以某种方式简化......

{{(?:[\s]+)?(.*)([\s]+)?}}

我试图从以下模式中获取字符串...

{{SOME_STRING}}
{{    SOME_STRING}}
{{  SOME_STRING   }}
{{  SOME-STRING      }}
{{  SomE STRING  }}

此外,由于比赛中不应有任何尾随空格,因此它不能正常工作。

Regex101链接:http://regex101.com/r/kT9yT5

3 个答案:

答案 0 :(得分:1)

  

比赛中不应有任何尾随空格

您可以尝试以下正则表达式并获取匹配的组

/{{\s*(.*?)\s*}}/g

这意味着{{}}中包含的所有内容都使用 Reluctant quantifiers 进行分组。

这是Online Demo

详细了解Greedy vs. Reluctant vs. Possessive Quantifiers

答案 1 :(得分:1)

对于直接匹配,请使用\K Magic

{{\s*\K[^}]+?(?=\s*}})

See demo.

<强>解释

  • {{\s*匹配开头大括号和任何空格字符
  • \K告诉引擎放弃与其返回的最终匹配项目匹配的内容
  • 否定字符类[^}]+?懒惰地匹配任何字符......
  • 前瞻(?=\s*}})可以断言后面的内容是空格和结束括号。

示例代码

请参阅live php demo底部的输出。

$regex = '~{{\s*\K[^}]+?(?=\s*}})~';
preg_match_all($regex, $yourstring, $matches);
print_r($matches[0]);

<强>输出

[0] => SOME_STRING
[1] => SOME_STRING
[2] => SOME_STRING
[3] => SOME-STRING
[4] => SomE STRING

答案 2 :(得分:0)

您可以尝试使用以下正则表达式删除{}内的所有尾随和开始空格,

\{\{\s*(\w+[-\s]?\w+)\s*\}\}

DEMO

<强>解释

  • \{\{文字大括号{{
  • \s*零个或多个空格。
  • \w+一个或多个单词字符。
  • [-\s]?可选-或空格字符。
  • \w+一个或多个单词字符。
  • \s*零个或多个空格字符。
  • \}\}文字结束花括号}}

你的代码是,

$regex = '~\{\{\s*(\w+[-\s]?\w+)\s*\}\}~';
preg_match_all($regex, $yourstring, $matches);
print_r($matches[1]);

Ideone