我正在努力建立一个咒骂预防系统,到目前为止我忽略了空白(用“\ s *”)而我忽略了这个案例(“(?i)”)。我怎么会忽略重复的字符?例如heeeello。
答案 0 :(得分:0)
没有任何标记可以打开以忽略任何重复的字符。但是,您可以使用“一个或多个”量词(+
)来匹配任何字符,字符类或组的一个或多个匹配项。例如,模式he+l+o
将匹配以下所有内容:
helo
heelo
hello
heeeello
答案 1 :(得分:0)
假设您需要一个通用的解决方案来删除重复的字符,只要成功,您就会反复将(.)\1
替换为\1
。
答案 2 :(得分:0)
使用+来捕获()中的序列重复次数。 e +将捕获heeeeello中的所有e。
查看rubular.com,非常简单的学习,练习和测试正则表达式的方法。
答案 3 :(得分:0)
答案 4 :(得分:-1)
问题比你想象的要困难。假设您希望为字典中的每个单词匹配“不少于此字符数”。然后你必须在每个字符之后用+
创建一个正则表达式字典...
Initial dictionary:
boom
smurf
tree
cannibals
使用文本编辑器处理字典:
sed -e 's/\(.\)/\1\+/g' dictionary.txt > regex.txt
这会在所有字符之间加上+
:
b+o+o+m+
s+m+u+r+f+
t+r+e+e+
c+a+n+n+i+b+a+l+s+
现在你可以匹配你的“重复”单词:
bom : no match
smuuurf : match
trees : no match
canibals : no match
cannnibalssss : match
您可能希望添加“字边界” - 以便smurfette
不会抓住smurf
。这意味着在每个表达式之前和之后添加\b
(“单词边界”)。
注意 - 仅删除字典中的所有重复字母以及要匹配的字词是不够的 - 否则您可能会因为您的列表上有“大便”而禁止“弹出”(以及您如何知道停止时) “pooop”恰好达到了两个字符)。这就是为什么我更喜欢这种解决方案,而不是其他一些建议剥离重复的解决方案。