正则表达式找到两个字符串之间的公用字母

时间:2013-01-02 15:12:44

标签: regex groovy

我一直在Google上搜索几个小时,并获得了部分解决方案。

我是Groovy和正则表达式的新手。多年来我偶尔使用正则表达式,但我对它很不满意。

我有一个简单的游戏,用一个隐藏的单词来检查你有多少个字母。

为了简单起见,让我们说“pan”这个词和“can can”这个人类型。

我希望正则表达式的结果能给我“一个”。

现在,我已经通过这样做(在Groovy中)得到了部分工作:

// Where "guess" is the user's try and "word" is the word they need to guess.
def expr = "[$word]"
def result = guess.find(expr)

结果字符串仅包含第一个匹配的字母。有人有更优雅的解决方案吗? 提前致谢

3 个答案:

答案 0 :(得分:3)

我认为这不是正则表达式的用例。如果用户输入.*之类的话,你就必须自行处理不让用户猜测的事情。

典型的收集工作更适合IMO这项任务。一种解决方案是找到两个单词的交集,将它们视为一组字符:

(word as Set).intersect(guess as Set).join()

或过滤出现在秘密词中的猜测字符:

guess.findAll { word.contains(it) }.unique().join()

答案 1 :(得分:1)

假设两个字符串是s1和s2 现在找到常见的字符串do:

commonString=s1.replaceAll("[^"+s2+"]","");

如果你的单词包含元字符 先做:

Pattern.quote(s2);

然后

commonString=s1.replaceAll("[^"+s2+"]","");

答案 2 :(得分:0)

你可以尝试:

guess.findAll( /[$word]/ ).join()