带有引号的正则表达式在Java中不匹配任何内容
我可以使用以下示例字符串之一:带有引号的正则表达式在Java中不匹配任何内容,java,regex,Java,Regex,我可以使用以下示例字符串之一: Apple $Banana Kiwi Apple $Banana, Kiwi Apple $Banana. Kiwi 我需要随便找“香蕉美元” 在java 6中,我使用了以下方法: String quotedStringToFind=Pattern.quote(stringTofind); 我还需要找到完整的单词,因此我尝试了以下方法: Pattern.compile("\\b"+quotedStringToFind+"\\b"); 没有匹配的。正则表达
Apple $Banana Kiwi
Apple $Banana, Kiwi
Apple $Banana. Kiwi
我需要随便找“香蕉美元”
在java 6中,我使用了以下方法:
String quotedStringToFind=Pattern.quote(stringTofind);
我还需要找到完整的单词,因此我尝试了以下方法:
Pattern.compile("\\b"+quotedStringToFind+"\\b");
没有匹配的。正则表达式在语法上是正确的。我不明白它为什么不工作。有几个问题:
是一个保留字符,表示“字符串结尾”。您需要首先转义任何保留字符($
),或者像@Reiumeus的答案一样使用\^$.|?*+()[{
编译表达式Pattern.LITERAL
- 在
中,空格和Apple$Banana
之间没有单词边界,因为它们都是非单词字符。如果希望在$
之前或之后有空格,可以使用如下表达式:(请注意,这不适用于stringTofind
,因为它不会评估lookarounds)Pattern.LITERAL
- 在字符串的第一个字符之前,如果第一个字符是单词字符
- 如果最后一个字符是单词字符,则在字符串中最后一个字符之后
- 在字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符
Apple$香蕉猕猴桃
第一种方案失败,因为$
不是单词字符。因此字符串中的第一个字符前面不能有匹配项
根据您在其他地方的评论,您不希望匹配字符串,如“$Bananayellow”
,因此我们可以假设您希望文本“$Banana”
以单词字符以外的字符结尾
正如Tim在中所建议的,可以使用正则表达式(?。该表达式将检查$Banana
前面是否有非空白字符,后面是否有单词边界
比如说,
List<String> testStrings = List.of("Apple $Banana Kiwi",
"Apple $Banana, Kiwi",
"Apple $Banana. Kiwi",
"Apple $Bananayellow. Kiwi");
// need to escape the special `$` character
Pattern pattern = Pattern.compile("(?<!\\S)\\$Banana\\b");
for (String testString : testStrings) {
Matcher matcher = pattern.matcher(testString);
if (!matcher.find()) {
System.out.println("failed to find pattern in string " + testString);
}
}
List testStrings=List.of(“苹果$香蕉猕猴桃”,
“苹果$香蕉,猕猴桃”,
“苹果香蕉猕猴桃”,
“苹果$Bananayellow.Kiwi”);
//需要转义特殊的“$”字符
Pattern Pattern=Pattern.compile(“(?您需要知道输入中是否包含“$Banana”,还是要提取中间的单词?@Bohemian我不认为OP知道单词是$Banana
,因为变量名为stringTofind
@Sotirios正则表达式课程继续:(?不仅声明前面的空格,还声明字符串的开头。理想情况下,当模式恰好是第一个时,您希望模式也匹配$Banana
。