正则表达式匹配多个子字符串

时间:2016-07-30 13:53:45

标签: php regex preg-match preg-match-all

我编写了一个正则表达式来测试字符串是否是逻辑表达式。这是正则表达式:

05_webpack_run_build_prod:
    command: "cd /tmp/deployment/application && sudo webpack --config webpack.prod.config.js --progress --colors"

这是我用上面的表达式测试的主题:

/(.*)(<|>|<=|>=|=|!=)(.*)/

PHP中的3!=2 函数返回以下数组:

preg_match_all

我的逻辑运算符错误,因为它不仅与[ [ "3!=2" ], [ null ], [ "=" ], [ "2" ] ] 模式匹配,而且与=运算符匹配。我应该如何重写正则表达式以匹配括号中的多个字符串?

3 个答案:

答案 0 :(得分:1)

您应该在运营商之前排除<>!,在运营商之后排除=。然后,只是缩短,将操作员分组更紧。

([^<>!]*)([<>]=?|!?=)([^=]*)

你也可以用它来缩短它:

(\w+)([<>]=?|!?=)(\w+)

使用<=>,使用

([^<>!]*)(<=>|[<>]=?|!?=)([^=>]*)

或者,在某些情况下更好,

(\w+)(<=>|[<>]=?|!?=)(\w+)

答案 1 :(得分:1)

.*正在吃!。使.*特定于您不希望它匹配的运算符。我想:

([^!<>=]+)(<|>|<=|>=|!=|=)(.*)

应该这样做。

演示:https://regex101.com/r/yM5aY8/1

或者如果您只使用数字,请使用\d+

演示2:https://regex101.com/r/yM5aY8/2

答案 2 :(得分:1)

而不仅仅是。*在开头和结尾尝试&#39; \ w。*&#39;如果表达式两边都有数字/变量名

(\w.*)(<|>|<=|>=|=|!=)(\w.*)