Java正则表达式

在识别数据流名称时由于想支持正则表达式的订阅流方式,在此接触了一些,作个记录。

  1. 错误: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.* 。这样匹配的才会是正确的。

        另外,又发现".*"并不是想象中的匹配任意字符,并不起作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值