我需要编写与以012开头的11位数字和012之后的两位数字匹配的模式,不应为0,1,而应重复。
例如:01244521478为true或01266235698为true和01200256354为false。我尝试了以下模式:"012(.)\\1{1}([\\d]{6}$)"
,但我不知道在012之后不允许在哪里说0,1。
请帮助我
答案 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}
->匹配任意六位数字$
->输入结束答案 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
您可以做的是更改012$$521478
以匹配2到9之间的数字,例如(.)\\1)
。如果您未在工具或代码中引用第二捕获组,则可以省略它。 ([2-9])\\1
可以省略,{1}
可以写为[\\d]
更新后的正则表达式可能如下:
\\d
在Java中:
^012([2-9])\1\d{6}$
说明
String regex = "^012([2-9])\\1\\d{6}$";
断言字符串的开头^
字面上匹配012
分组捕获2-9位数字([2-9])
反向引用第一个捕获组\1
匹配6位数字\d{6}
声明字符串的结尾