为什么我的Java String匹配这个正则表达式?

时间:2013-05-07 17:28:23

标签: java regex string

我有一段代码:

String textFieldContents = myJTextField.getText(); // javax.swing.JTextField

// If two consecutive pipes exist in the text, or if the text ends with a pipe, print a statement.
if(textFieldContents.matches("||") || textFieldContents.endsWith("|"))
    System.out.println("We have a winner!");

myJTextField文本字段(Swing组件)为空且其中没有文本时,将打印We have a winner!文本。为什么呢?

4 个答案:

答案 0 :(得分:5)

请注意,public boolean matches(String regex)需要正则表达式

您需要转发special char |

(转义正则表达式由\完成,但在Java中,\写为\\)。

您还可以使用Pattern#quote

textFieldContents.matches(Pattern.quote("|"));

请参阅@JimDagg答案(+1)以了解为什么它总是在您的情况下返回 true

答案 1 :(得分:1)

管道符是Java正则表达式中的特殊字符。它实际上是一个"或"。你的正则表达式最终说"匹配零个字符或零个字符",这在字符串中的任何地方都是真的。使用正则表达式中的反斜杠转义它将解决问题...

但Java字符串中的反斜杠也有特殊含义,所以你必须转义逃避管道的反斜杠!!您最终必须使用\\|,这将生成正则表达式\|,这会在管道符|上产生匹配。

答案 2 :(得分:0)

String.matches()使用正则表达式匹配与输入字符串。在正则表达式中,'|'具有特殊含义和它(用作ORing)。因此,您需要显式地转义此特殊字符,以避免被用作特殊字符。

使用类似的东西:

if(textFieldContents.matches("\\|\\|"))

答案 3 :(得分:0)

|是一个使用正则表达式的特殊字符,你需要逃避字符来逐字地使用它们。如果你只是想知道某处是否有两个连续的管道,你还需要吸收任何预处理和尾随的特征。

if(textFieldContents.matches(".*\\|\\|.*") || textFieldContents.endsWith("|"))
    System.out.println("We have a winner!");
相关问题