正则表达式匹配包含特定字符的字符串(如果未被空格包围)

时间:2009-12-30 20:32:15

标签: regex

寻找一个匹配所有字母数字字符的正则表达式字符串加上一些包含+和 - 的特殊字符串。我们目前的正则表达式如下:

^[a-zA-Z0-9_,\.\-' ]+$

但是,我们还需要包含+-,只要它们没有被任何一方的空白包围。例如,A+ BC匹配,但不匹配A + BC

尝试使用单词边界并且没有成功。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

怎么样:

(([^ ]|^)[-+] ?| ?[-+]([^ ]|$))

这应该匹配任何一方({1}},-或{{1} )。

如果你想在其中加入字母数字,你可以这样做:

+

然后重复一遍:

A+ BC

这将匹配,例如-A -BC,但不匹配((([^ ]|^)[-+] ?| ?[-+]([^ ]|$))|[a-zA-Z...]+)

答案 1 :(得分:1)

如评论中所述,您希望接受+-的阻止,但前提是两边都有一个字符。这似乎运作良好:

^([\w\s.,']|\b[+-]+|[+-]+\b)+$

说明:

此正则表达式只能在+-之后才能找到匹配的字符。

以下一项或多项:
[\w\s.,'] - 字母数字,空格,点,逗号或撇号。 OR
\b[+-]+ - 字母数字,点,逗号或撇号,后跟+-块 OR
[+-]+\b - 一个+-块后跟一个字母数字,点,逗号或撇号。

测试用例:

接受: a+ bv. a+2 A+ B -C A+B +1 -2 2+++-1 +1 ++3 2++++ 1++ 2

拒绝:A + BC a|+3 >+a A - B 2+++-1 +1 ++ ++++ +

其他:

字边界在这里可能效果不佳,因为+是一个字边界。它确实适用于RegExr,但你的味道可能会有所不同。这也可以:^([\w\s.,']|[\w.,'][+-]+|[+-]+[\w.,'])+$