我可以使用以下示例字符串之一:
Apple $Banana Kiwi
Apple $Banana, Kiwi
Apple $Banana. Kiwi
我需要找到litesrally" $ Banana"
在java 6中,我使用了这个:
String quotedStringToFind=Pattern.quote(stringTofind);
我还需要找到完整的单词,所以我尝试了这个:
Pattern.compile("\\b"+quotedStringToFind+"\\b");
没有任何匹配。 RegEx在语法上是正确的。我无法理解它为什么不起作用。
答案 0 :(得分:1)
一些问题:
$
是一个保留字符,意思是“字符串的结尾”。您需要首先转义任何保留字符(\^$.|?*+()[{
),或者使用{Reiumeus的答案中的Pattern.LITERAL
编译表达式。$
中的Apple $Banana
之间没有字边界,因为它们都是非字字符。假设您希望在stringTofind
之前或之后有空格,您可以使用这样的表达式:(?<=\\s|^)\\$Banana(?=\\s|$)
(请注意,这不适用于Pattern.LITERAL
,因为它不会'唤醒外观)。答案 1 :(得分:-3)
[...]它匹配一个名为&#34;字边界的位置&#34;。这个匹配是零长度。
有三种不同的职位符合词边界:
- 在字符串中的第一个字符之前,如果第一个字符是单词字符。
- 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
鉴于
Apple $Banana Kiwi
第一个场景失败,因为$
不是单词字符。所以在字符串中的第一个字符之前不能匹配。
您可以使用空格来分隔$Banana
。
Pattern pattern = Pattern.compile("\\s" + quotedStringToFind + "\\s");