我一直在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)
结果字符串仅包含第一个匹配的字母。有人有更优雅的解决方案吗? 提前致谢
答案 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()