我需要为以下String模式生成一个regExr。
A:B:C:d
其中 A 应仅包含字符串,而 B 可包含字符串和数字, C 应为字符串且 D 应该只是数字。
我自己创建了RegExr并且正在工作。
[a-zA-Z]+(:)+[a-zA-Z1-9]+(:)+[a-zA-Z]+(:)+[1-9]+
但对于我想要比我更短的模式,是否有更好的regExr?或者我的还好吗?
我使用的是Java8。
答案 0 :(得分:2)
使用\d
代替1-9
(如果允许为0)。
答案 1 :(得分:2)
您可以使用\ d作为数字,如果您不介意接受下划线,您也可以使用\ w作为[a-zA-Z]。
您的Regexp可能会成为:
[\w]+:[\w\d]+:[\w]+:[\d]+
答案 2 :(得分:1)
如果你必须避免 0 和 _ ,你的正则表达式代码看起来完全没问题,否则你可以使用上面的例子。如果你想把它作为参数传递,那么尝试将它分配给一个字符串,这将更加方便(我还没有尝试过!)。
答案 3 :(得分:0)
你的表情很好看。如果您想要更多的regEx操作,请使用此站点,这非常有用txt2re
答案 4 :(得分:0)
如果您不希望自己的匹配成为较大匹配的一部分,则可以使用单词边界\b
。 (或使用锚点^
和$
来断言字符串的开头和结尾)
例如a:1a:b:0
会匹配,但a:1a:b:0a
不匹配,因为它最后有a
。
要匹配数字0-9,您可以使用\d
并匹配单个冒号,您可以使用:
而不使用量词+
或捕获组()
你的正则表达式看起来像这样:
请注意演示中不区分大小写的标记/i
,以使用[a-z]
代替[A-Za-z]
\b[a-z]+:[a-z\d]+:[a-z]+:\d+\b
爪哇:
答案 5 :(得分:0)
您的RegEx仅捕获:
。
此RegEx适用于“Hello:hel35a:ahelkj:684579”并捕获整个字符串。
([A-Za-z]+:(?:[A-Za-z]|\d)+:[A-Za-z]+:\d+)