Java正则表达式匹配重复的数字,而不是0,1

时间:2018-12-04 19:10:43

标签: java regex match digits

我需要编写与以012开头的11位数字和012之后的两位数字匹配的模式,不应为0,1,而应重复。 例如:01244521478为true或01266235698为true和01200256354为false。我尝试了以下模式:"012(.)\\1{1}([\\d]{6}$)",但我不知道在012之后不允许在哪里说0,1。 请帮助我

2 个答案:

答案 0 :(得分:1)

您的正则表达式012(.)\1{1}([\d]{6}$)很好,但不能满足您的第4位和第5位数字,不能为0或1,应重复输入。另外,{1}也不需要,因为默认情况下它是隐式的。仅当居里括号内的值大于或等于{2}{1,5}

的范围时,才使用它

此正则表达式应满足您的需求,

^(?=\d{11}$)012([^01])\1\d{6}$

说明:

  • ^->字符串开头
  • (?=\d{11}$)->积极向前看,以确保它只包含数字并且完全由11位数字组成。为什么因为[^01]需要取反0和1而不允许其他任何字符,所以需要这样做。
  • 012->从字面上匹配012
  • ([^01])\1->接下来的两位数字将重复,并且可以是0和1以外的任何数字
  • \d{6}->匹配任意六位数字
  • $->输入结束

Demo

答案 1 :(得分:0)

在正则表达式中,您使用Test$Variable <- with(Test, ifelse(grepl("No", Model_type), as.character(Variable), paste0(Function, "(", Variable, ")"))) Test # Function Variable Model_type #1 exp exp(x) Model_Yes #2 log10 log10(y) Model_Yes #3 exp z Model_No 来捕获组中的任何字符,并使用向后引用(例如也与(.)\\1

匹配)来引用该capture。

您可以做的是更改012$$521478以匹配2到9之间的数字,例如(.)\\1)。如果您未在工具或代码中引用第二捕获组,则可以省略它。 ([2-9])\\1可以省略,{1}可以写为[\\d]

更新后的正则表达式可能如下:

\\d

在Java中:

^012([2-9])\1\d{6}$

Regex demo | Java demo

说明

  • String regex = "^012([2-9])\\1\\d{6}$"; 断言字符串的开头
  • ^字面上匹配
  • 012分组捕获2-9位数字
  • ([2-9])反向引用第一个捕获组
  • \1匹配6位数字
  • \d{6}声明字符串的结尾