多语言展示
当前在线:1768今日阅读:126今日分享:42

正则表达式30分钟入门系列之3

正则表达式也是一种语言,在解析字符串领域独领风骚。本文分享关于正则表达式中两个最常用的关键字\s和\S的用法
工具/原料
1

IntelliJ IDEA

2

Java

3

Regular expressions

方法/步骤
1

\s:这个关键字代表 任意的空白符任意的哦,只要看不到的字符都是空白字符的先来看看测试的脚手架代码:Code:package chapter4;import java.util.Arrays;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * Created by MyWorld on 2016/3/23. */public class RegexStudyDemo {    public static void main(String[] args) {        String regexStr = 'Hello\\s!';        List input = Arrays.asList('Hello !', 'Hello !', 'Hello\b!',                'Hello\t!', 'Hello\r!', 'Hello\f!', 'Hello\n!');        System.out.println(isMatch(input, regexStr));    }    private static boolean isMatch(List inputs, String regexStr) {        boolean result = true;        for (String input : inputs) {            Pattern pattern = Pattern.compile(regexStr);            Matcher matcher = pattern.matcher(input);            if (matcher.matches()) {                continue;            }            System.out.println(input + '  is not match!');            result = false;        }        return result;    }}

2

java代码就不再介绍了,前面已经解析过了对什么时空白字符,各位tx的判断字符都不同,现在来解决下上面的字符的含义'Hello !':中间是一个全角空格(是不是认为是两个空格了,不是啦)'Hello !'   :中间是一个正常的空格,是半角了'Hello\b!':中间的\b是java中预定义好的,表示认为是两个相邻田字格中间的分隔线吧'Hello\t!':这个不用多说,制表符了,就是按键盘上的Tab键就是'Hello\r!':\r是回车'Hello\f!':\f是换页符'Hello\n!':\n是换行符执行下看看结果:Output:Hello !  is not match!Hello!  is not match!false

3

不少眼尖的tx已经发现了,上面的代码执行时,返回false是因为'Hello\\s!'”不能匹配'Hello !'(这个中文全角空格)不能匹配'Hello\b!'(这个例子里,貌似'Hello\b!'和'Hello!'在输出结果上看不出来。说明举的例子,不是很恰当,下面的例子会澄清下)即\s在java中不能匹配中文全角空格和英文空格童话里都是骗人的,不是说好的,可以匹配空白字符的吗。。。

4

上次没通过的是'Hello\b!',还是'Hello !'(英文空格)更改代码Code:List input = Arrays.asList('Hello\b!', 'Hello!');

5

执行下看看结果给的两个都不匹配。Output:Hello!  is not match!(这个是'Hello\b!',因为list是有序的。\b粘贴过来,显示不出来了)Hello!  is not match!false说明java的正则表达式中\s不能匹配  \b和中文全角空格

6

最后介绍一下正则表达式与关键字\s意义正好相反的关键字\S\S:匹配任意不是空白符的字符\s说了那么多,这个\S就不多说了,直接来代码Code:String regexStr = 'Hello\\S!';List input = Arrays.asList('Hello\b!', 'Hello !');

7

执行下看看结果Output:true说明:'Hello\\S!'可以匹配'Hello\b!'和'Hello !'(中文全角空格)

8

'Hello\\S!'是否匹配'Hello!'(o和!什么也没有)呢更改代码:List input = Arrays.asList('Hello!','Hello汉!');执行下看看结果Output:Hello!  is not match!false

9

小结:java的正则表达式'Hello\\S!'可以匹配'Hello\b!'、'Hello汉!'和'Hello !'(中文全角空格)'Hello\\S!'和'Hello\\s!'都不匹配'Hello!'(o和!什么也没有)

推荐信息