您的位置:首页 > 编程语言 > Java开发

Java正则表达式

2012-02-26 21:43 190 查看
在识别数据流名称时由于想支持正则表达式的订阅流方式,在此接触了一些,作个记录。

错误:Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )

报错主要是源于这一句:

Pattern pattern = Pattern.compile("^\w+$");


根据Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线表示正则表达式受到保护,不被 Java 字节码编译器解释。故而在这里,\w是转义字符,虽然就正则表达式来看^\w+$确实没错,但是为了不让java字节码编译器解释为其它,需要再加上一个反斜杆。这样就不再报错了。

2. 关于识别仅由数字, 字母及下划线组成,据此我为认为这是一个非正则表达式,只是一个普通的数据流名称。判别方法:

Pattern pattern = Pattern.compile("^\\w+$");
Matcher matcher = pattern.matcher(stream);


但其实关于这个,我一直有一个疑问,这是一个特例吗,因为\w其实表示的是匹配任意的数字和字母,这里是通过哪个符号把下划线_包括进去了呢...

$是表示匹配线,+号是重复一次或多次

3. 关于匹配任意字符:

一直用windows搜索时都很习惯于,匹配任意字符时直接用*号,比如说streamA, streamB, streamC,那么我应该直接用stream*就可以匹配前面这三个,但在测试时才发现跟自己想的不一样,对于Java的正则表达式来说,直接用*号,表示的是它前面的那个字符重复0次或多次。

而.号才是表示匹配任意字符,故而想匹配stream开头的字符时应该用stream.* 。这样匹配的才会是正确的。

另外,又发现".*"并不是想象中的匹配任意字符,并不起作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: