RegEx:两个字母重复两次的单词(例如ABpoiuyAB、xnvXYlsdjsdXYmsd)



我今天有两项regex任务要做,其中一项做得很好,另一项却失败了。第一项任务是在一篇又长又长的文本中找到所有以"F"开头、以元音结尾的单词:

(bf)w*([euioay]b)

而且效果很好。

第二个对语文学学生来说太难了;-(我必须找到所有重复至少两次两个字母序列的单词,例如:

  • tatarak是tatarak,"TA"两次
  • brzozowski是brzozoski,"ZO"两次
  • loremipsrecdks是loremipsrecdks,"RE"两次

我能帮忙吗?提前感谢;-(

让我们看看:

(w{2})匹配两个字母(或数字/下划线,但我们忽略这一点(,并在组号1中捕获它们。然后1匹配该组匹配的任何内容。所以

bw*(w{2})w*1

是您要查找的(您不需要{2,},因为如果重复三个字母,两个字母也会重复。不检查超过两个会使正则表达式更有效率。您可以在1反向引用成功后停止匹配(。

这个模式应该可以完成

bw*?(w{2})w*?1w*?b
  • b是一个边界词
  • w*?一定数量的字母(懒散地(
  • (w{2})正好两个字母,匹配并捕获
  • w*?同上
  • 1我们的两个字母捕获组的内容
  • w*?同上
  • b另一个词bounddry

java中的快速测试:

public static void main(String[] args) {
   final Pattern pattern = Pattern.compile("\b\w*?(\w{2})\w*?\1\w*?\b");
   final String string = "tatarak brzozowski loremipsrecdks a word that does not match";
   final Matcher matcher = pattern.matcher(string);
   while(matcher.find()) {
       System.out.println("Found group " + matcher.group(1) + " in word " + matcher.group());
   }
}

输出

Found group ta in word tatarak
Found group zo in word brzozowski
Found group re in word loremipsrecdks

试试:bw*?(w{2})w*?1w*b

最新更新