为字符串

时间:2018-05-18 03:47:13

标签: java regex

我需要为以下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。

6 个答案:

答案 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

爪哇:

\\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+)