Java 正则表达式备忘录
[] ← 这是用于范围指定的哦! ← 并不是那么回事哦!
Pattern pattern = Pattern.compile("^Hello, ([.]+)$");
String in = "Hello, Qiita!";
Matcher matcher = pattern.matcher(in);
if (!matcher.matches()) return;
System.out.println(matcher.group(1));
你好,之后只想要字母,所以用[\\w]+……
不过,我还是想包括数字,所以用[\\w\\d]+……
嗯,但是我也希望能包含符号之类的…
那就用.来代替吧!
[\\w\\d\\-\\+_\\./\\^\\$]+可以换成[.]+
为什么 Qiita! 没有显示呢?它告诉我这是一个无效的正则表达式模式。
这个原因很简单,[] 只能用于具有多个条件的模式。点表示一个任意字符,不可以有多个条件,比如从 A 到 Z 或者从 0 到 9。
[修正 @2023年8月17日]
我收到了PECMM先生的指正意见。非常感谢您。
在模式中,[.] 不会成为“匹配单个字符的字符类”吗?
我原本就觉得有点奇怪,但只要去掉中括号就能先暂时运行了呢……所以,我把追究原因放在后面,给出了错误的解释。
当我进行调查时
[…]将与…中的任意一个字符匹配。在[…]中,字符^ $ . + * / [ { } ( )将失去其含义。
《とほほ的正则表达式入门》
找到了类似的解释。
基于上述事情,重新解释一下模式 [.] + ,在方括号内,. 不是“任何一个字符”,而是被视为“点本身”,因此 [.] + 表示“重复出现一个或多个点的字符串”的正则表达式模式。
根据这一点修改上面的代码。
Pattern pattern = Pattern.compile("^Hello, (.+)$");
这就是。
System.out.println(matcher.group(1));
// Qiita!
你很好地展示出来了!