我正在尝试在Java中实现Swedish "Robbers language"。它基本上只是用自己替换每个辅音,然后是“o”,然后是自己。我以为我使用了这段代码
str.replaceAll("[bcdfghjklmnpqrstvwxz]+", "$0o$0");
但是当有两个或更多后续辅音时失败,例如
String str = "horse";
它应该生成hohororsose
,但我得到hohorsorse
。我猜测替换会以某种方式混淆原始字符串中的匹配索引。我怎样才能使它发挥作用?
答案 0 :(得分:2)
str.replaceAll("[bcdfghjklmnpqrstvwxz]", "$0o$0");
删除+
量词,因为它会对辅音进行分组。
// when using a greedy quantifier
horse
h | o | rs | e
hoh | o | rsors | e
加号与前面的一个或多个字符,类或子模式匹配。例如,a +匹配ab和aaab。但不像*和 a?,模式a +在字符串的开头不匹配 缺乏" a"字符。
https://autohotkey.com/docs/misc/RegEx-QuickRef.htm
答案 1 :(得分:1)
+
表示:在一次和无限次之间,尽可能多次,根据需要回馈(贪婪)
+?
表示:在一次和无限次之间,尽可能少的时间,根据需要进行扩展(懒惰)
{1}
表示:恰好一次(无意义的量词)
在您的情况下,您不需要量词。
在线体验正则表达式