正如标题所说,我试图建立一个能够识别这种格式字符串的正则表达式:
word!!cat!!DOG!! ... Phone!!home!!
其中!!
用作分隔符。每个单词的长度必须介于1到5个字符之间。不允许使用空字,即不使用!!
,!!!!
等字符串
单词只能包含a
和z
之间的字母字符(不区分大小写)。在每个单词之后,我希望找到特殊的分隔符!!
。
我想出了下面的解决方案,但由于我需要添加其他控件(例如单词可以包含空格),我想知道我是否正确。
(([a-zA-Z]{1,5})([!]{2}))+
另请注意,不允许使用空字符串,因此使用+
我刚开始学习如何构建正则表达式,因此非常欢迎帮助和建议。我使用http://regexr.com/进行了一些测试,看起来没问题,但我想确定一下。谢谢!
不应匹配的示例:
a!!b!!aaaaaa!!
a123!!b!!c!!
aAaa!!bbb
aAaa!!bbb!
答案 0 :(得分:1)
!!
这取决于你想用正则表达式做什么。如果您想匹配!!
之间的值,可以采用以下两种方式:
([^!]+)!!
[^!]+
至少需要1个字符,而不是!
!!
代替[!]{2}
因为它相同但更具可读性如果您只想匹配实际的字词(而不是两个!
),可以使用正向前瞻来完成此操作:
[^!]+(?=!!)
(?=)
是一个积极的向前看。它要求内部的所有内容(即此处!!
)直接位于上一个匹配之后。但它不会在最终的比赛中出现。这是live example。
如果你想检查整个字符串的有效性,那么你需要这样的东西:
^([^!]+!!)+$
^
字符串的开头$
字符串结尾([^!]+!!)
一次或多次。 如果[^!]
不符合您的要求,您当然可以将其替换为[a-zA-Z]
或类似内容。