正则表达式,用于检查包含由分隔符分隔的一组单词的字符串

时间:2017-02-01 15:10:00

标签: regex

正如标题所说,我试图建立一个能够识别这种格式字符串的正则表达式:

word!!cat!!DOG!! ... Phone!!home!!

其中!!用作分隔符。每个单词的长度必须介于1到5个字符之间。不允许使用空字,即不使用!!!!!!等字符串

单词只能包含az之间的字母字符(不区分大小写)。在每个单词之后,我希望找到特殊的分隔符!!

我想出了下面的解决方案,但由于我需要添加其他控件(例如单词可以包含空格),我想知道我是否正确。

(([a-zA-Z]{1,5})([!]{2}))+

另请注意,不允许使用空字符串,因此使用+

我刚开始学习如何构建正则表达式,因此非常欢迎帮助和建议。我使用http://regexr.com/进行了一些测试,看起来没问题,但我想确定一下。谢谢!

不应匹配的示例:

a!!b!!aaaaaa!!
a123!!b!!c!!
aAaa!!bbb
aAaa!!bbb!

1 个答案:

答案 0 :(得分:1)

拆分字符串并使用!!

之间的值

这取决于你想用正则表达式做什么。如果您想匹配!!之间的值,可以采用以下两种方式:

与群组匹配

([^!]+)!!
  • [^!]+至少需要1个字符,而不是!
  • !!代替[!]{2}因为它相同但更具可读性

与先行

匹配

如果您只想匹配实际的字词(而不是两个!),可以使用正向前瞻来完成此操作:

[^!]+(?=!!)
  • (?=)是一个积极的向前看。它要求内部的所有内容(即此处!!)直接位于上一个匹配之后。但它不会在最终的比赛中出现。

这是live example

验证字符串

如果你想检查整个字符串的有效性,那么你需要这样的东西:

^([^!]+!!)+$
  • ^字符串的开头
  • $字符串结尾
  • 它要求整个字符串仅包含([^!]+!!)一次或多次。

如果[^!]不符合您的要求,您当然可以将其替换为[a-zA-Z]或类似内容。