我想要一个正则表达式表达式。
我需要正则表达式来处理字符和数字,请帮忙。
答案 0 :(得分:2)
答案 1 :(得分:0)
您通常可以使用捕获组和反向引用来检测连续的字符。例如,在grep
:
$ echo abc | grep '\([a-z]\)\1'
$ echo abbc | grep '\([a-z]\)\1'
abbc
围绕你正在寻找捕捉结果匹配部分的东西的括号,然后在正则表达式的其余部分中将此部分替换为\1
。
就您的具体测试用例而言,请参阅以下内容:
$ echo 12345 | grep '\([a-zA-Z0-9]\)\1' >/dev/null; echo $?
1
$ echo 11145 | grep '\([a-zA-Z0-9]\)\1' >/dev/null; echo $?
0
$ echo aaa664 | grep '\([a-zA-Z0-9]\)\1' >/dev/null; echo $?
0
您可以看到成功的字符串1
,错误的字符串0
(与正则表达式匹配)。
根据您使用的语言,检测匹配与否的方法可能略有改变,但捕获组和反向引用的整体概念应该相同。
答案 2 :(得分:0)
如果你的正则表达式允许否定,只需否定(.)\1
假设:
$ echo "$e"
12345 => true
11145 => false
aaa664 => false
现在使用perl,只有在与(.)\1
不匹配时才会打印:
$ echo "$e" | perl -lne 'print if !/(.)\1/'
12345 => true
(或$ echo "$e" | perl -lne 'print unless /(.)\1/'
)
与sed相同:
$ echo "$e" | sed -n '/\(.\)\1/!p'
12345 => true
的grep:
$ echo "$e" | grep -v '\(.\)\1'
12345 => true
如果你没有否定匹配,那么带有print的重复字母的行:
$ echo "$e" | grep '\(.\)\1'
11145 => false
aaa664 => false
答案 3 :(得分:0)
if (preg_match('/(.)\\1{2}/', $value)) {
return 'NOT OK'; //invalid
} else {
return 'OK'; //valid
}
这是答案!