【软构随记】Java中的正则表达式和中文字符问题

本学期前半学期刚刚学习了形式语言与自动机,其中最先讲到的就是正则语言,Java中的正则表达式与课堂上的内容形式上略有区别,但万变不离其宗。在构建某些依赖于许多其他ADT的对象时使用正则表达式可以大大减少客户端创建各种成员ADT的工作量。用户只需要输入一个符合特定格式的String,而我们可以将这个字符串按一定规则解析并使用输入的信息创建所需的对象。

用法

首先是Java中正则表达式的用法,需要导入java.util.regex:

Pattern regexPattern = Pattern.compile(regex);//regex是正则表达式,即“规则”
Matcher matcher = regexPattern.matcher(string);

之后调用matcher.matches()可以判断输入的string是否符合regex定义的规则。

如果并不需要检验多个字符串是否都符合同一表达式,而是只想知道一个字符串是否符合某个正则表达式时也可以使用一种更简洁的写法

string.matches(regex);

转义符

一些符号在正则表达式中是有其语法上的含义的,如引号,小括号,中括号和*,|等等,但有时我们也会需要以字符形式使用这些符号,这时就需要引入转义符"\"。有趣的是,并非所有符号前都只需要加一个转义符,有的需要加两个,在此举例如下:

  • 引号:\"(只需一个转义符)

  • 小括号:\\( (两个转义符)

最有效的确认如何输入的办法就是上手实操,IDEA环境下在Pattern.compile()的输入中尝试输入即可得知自己输入的正则表达式是否符合语法,不符合时IDE会直接报错。

使用中文

有时我们需要在正则表达式中使用中文字符,经查找资料发现可以用汉字编码来实现。在UTF-8编码下中文字符编码范围是u4E00-u9FA5。注意字符编码前面也需要加转义符,最终的形式是\\u4E00-\\u9FA5

一个例子

接受型如: “名称”(一位数字) |"名称"(一位数字)··· 的串

Pattern regexPattern = Pattern.compile("(\"([a-zA-Z0-9_\\u4E00-\\u9FA5])*\"\\([\\d]\\)\\|)*\"([a-zA-Z0-9_\\u4E00-\\u9FA5])*\"\\([\\d]\\)");
       Matcher matcher = regexPattern.matcher("\"汉字1ABc\"(7)|\"khador\"(3)");
       if (matcher.matches()){
           System.out.println("yes!");
      }

其他

可以使用regex101: build, test, and debug regex来在线编辑正则表达式并作检验,还能输出具体的匹配结果,在转义符问题上似乎与java略有出入,但仍是非常好的学习工具。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值