正则表达式 。困惑我

时间:2016-04-07 02:58:07

标签: java regex

在Java中,我有Pattern.compile("^[.]+");。它只匹配.字符。

我将其更改为Pattern.compile("^.+");,然后它与JavaScript中的任何字符匹配。

但是,在JavaScript中,^[\w.]+匹配特殊字符,例如abc**。我很困惑。

1 个答案:

答案 0 :(得分:1)

  

我不知道为什么/^[\w.]+/.test('abc**')在js和java中的工作方式不同。

^[\w.]+abc**不匹配,而与字符串does match部分不匹配。根据您使用正则表达式的方式,它会在 整个 字符串中搜索匹配项,或者在 部分中搜索匹配字符串。

在Java中

要尝试匹配 整个 字符串,请使用.matches()

Pattern.compile("^[\\w.]+").matcher("abc**").matches(); //false
Pattern.compile("^[\\w.]+").matcher("abc").matches();   //true

注意:此简写为Pattern.matches(regex, input);

要尝试匹配字符串的 部分 ,请使用.find()

Pattern.compile("^[\\w.]+").matcher("abc**").find();    //true
Pattern.compile("^[\\w.]+").matcher("abc").find();      //true
Pattern.compile("^[\\w.]+").matcher("**").find();       //false

在JavaScript中

要尝试匹配 整个 字符串,请在正则表达式的末尾添加$,然后使用.test()

/^[\w.]+$/.test("abc**"); //false
/^[\w.]+$/.test("abc");   //true

要尝试匹配字符串的 部分 ,只需使用.test()

/^[\w.]+/.test("abc**");  //true
/^[\w.]+/.test("abc");    //true
/^[\w.]+/.test("**");     //false