正则表达式匹配不被空格包围

时间:2018-07-07 18:24:31

标签: java regex regex-negation regex-lookarounds

上下文:我正在构建一个有趣的解释器,需要实现空白规则。

规则是,当正则表达式不被空格包围时,必须匹配加号“ +”。 这是一个示例文本:

a+b c +d g+ h i + j x+y

a和b 之间的加号以及 x和y 之间的加号应匹配。我是正则表达式的新手。但是,我尝试了以下正则表达式:

\+(?<!\s)(?!\s)

对我而言意味着

\+         find all "+" matches
(?<!\s)   (neg look behind) that don't have spaces behind
(?!\s)     (neg look ahead) that don't have spaces ahead

但是,当我在regex101上运行此代码时,我只能匹配 a和b 之间的第一个加号。

我不确定我在这里做错了什么。建议是值得赞赏的。

1 个答案:

答案 0 :(得分:2)

您可以简单地使用\[a-zA-Z\]\+\[a-zA-Z\]

或者如果+周围还有更多字符,请使用

[a-zA-Z]+\+[a-zA-Z]+

更新:您可以通过在后向和超前条件之间移动匹配的符号来使用(?<!\s)[+)-](?!\s)