正则表达式匹配多个子串
Regular expression match multiple substring
我写了一个正则表达式来测试一个字符串是否是逻辑表达式。这是正则表达式:
/(.*)(<|>|<=|>=|=|!=)(.*)/
这是我用上面的表达式测试的主题:
3!=2
preg_match_all
函数在PHPreturn以下数组:
[
[
"3!=2"
],
[
null
],
[
"="
],
[
"2"
]
]
我得到了一个错误的逻辑运算符,因为它不仅匹配 =
模式,而且还匹配 !=
运算符。我应该如何重写正则表达式以不匹配括号中的多个字符串?
您应该排除运算符前的 <>!
和运算符后的 =
。然后,为了缩短,将运算符分组更紧密。
([^<>!]*)([<>]=?|!?=)([^=]*)
你也可以这样缩短它:
(\w+)([<>]=?|!?=)(\w+)
用<=>
,用
([^<>!]*)(<=>|[<>]=?|!?=)([^=>]*)
或者,在某些情况下更好,
(\w+)(<=>|[<>]=?|!?=)(\w+)
.*
正在吃掉!
。使 .*
特定于您不希望它匹配的运算符。我认为:
([^!<>=]+)(<|>|<=|>=|!=|=)(.*)
应该做。
演示:https://regex101.com/r/yM5aY8/1
或者如果您只处理数字,请使用 \d+
.
如果表达式
的两边都有digits/variableName,而不是仅在开头和结尾使用.*,请尝试'\w.*'
(\w.*)(<|>|<=|>=|=|!=)(\w.*)
我写了一个正则表达式来测试一个字符串是否是逻辑表达式。这是正则表达式:
/(.*)(<|>|<=|>=|=|!=)(.*)/
这是我用上面的表达式测试的主题:
3!=2
preg_match_all
函数在PHPreturn以下数组:
[
[
"3!=2"
],
[
null
],
[
"="
],
[
"2"
]
]
我得到了一个错误的逻辑运算符,因为它不仅匹配 =
模式,而且还匹配 !=
运算符。我应该如何重写正则表达式以不匹配括号中的多个字符串?
您应该排除运算符前的 <>!
和运算符后的 =
。然后,为了缩短,将运算符分组更紧密。
([^<>!]*)([<>]=?|!?=)([^=]*)
你也可以这样缩短它:
(\w+)([<>]=?|!?=)(\w+)
用<=>
,用
([^<>!]*)(<=>|[<>]=?|!?=)([^=>]*)
或者,在某些情况下更好,
(\w+)(<=>|[<>]=?|!?=)(\w+)
.*
正在吃掉!
。使 .*
特定于您不希望它匹配的运算符。我认为:
([^!<>=]+)(<|>|<=|>=|!=|=)(.*)
应该做。
演示:https://regex101.com/r/yM5aY8/1
或者如果您只处理数字,请使用 \d+
.
如果表达式
的两边都有digits/variableName,而不是仅在开头和结尾使用.*,请尝试'\w.*'(\w.*)(<|>|<=|>=|=|!=)(\w.*)