2012-08-02 116 views
0

有轻微的正则表达式问题。我写了下面的代码来检查一个字是否包含在一个字符串中。Java正则表达式不起作用

boolean matches = Pattern.matches("\\b" + Pattern.quote(item.name) + "\\b", nap.code); 

item.name将会像 “半壁江山” nap.code将会像 “INT halfOfFour(){回流半部(4);}”

然而,我的模式匹配返回false ...我在这里做错了什么?

另外...有没有反正,如果这个单词包含在一个字符串中,这个返回假?

回答

3

我认为,模式匹配将匹配整个字符串不只是它的一部分。所以前缀。*和后缀与。*什么的。

使用模式匹配和分别,然后使用“查找()”中的匹配找到子匹配

+0

当然,我假设你不想使用字符串包含或indexOf/lastIndexOf – 2012-08-02 09:24:49

+0

'System.out.println(“int halfOfFour(){return half(4);}”。 match(“。* \\ bhalf \\ b。*”));' - > true – 2012-08-02 09:27:26

+0

“testfunc passing(){ int halfOfFour = half(4); assert(halfOfFour == 2,”The laws of (“。* \\ b”+ Pattern.quote(“half”)+“\\ b。*”); 仍然导致错误... – 2012-08-02 10:22:06

1

难道Java.lang.String.contains()方法做你想要的吗?

boolean contains = nap.code.contains(item.name); 

编辑:只有当词存在返回true,使用\ W模式(非单词字符),应该可以帮助您:

\W*(YOUR_WORD)\W* 
+0

不,他要检查是否完整** **字是的字符串中。 '佳能'包含'非',但它不是一个字。 'CaNon'包含单词non。 – 2012-08-02 09:25:31

+0

在他的例子中(half/halfOfHour),他说尽管'half'不是一个完整的单词,它仍然会返回true。所以我认为你误解了。 – kgautron 2012-08-02 09:27:53

+0

是的,但我认为他确实在寻找一种检查单词的方法。大写字母表示单词的开头。 – 2012-08-02 09:29:09