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先生的指正意见。非常感谢您。

在模式中,[.] 不会成为“匹配单个字符的字符类”吗?

我原本就觉得有点奇怪,但只要去掉中括号就能先暂时运行了呢……所以,我把追究原因放在后面,给出了错误的解释。

当我进行调查时

[…]将与…中的任意一个字符匹配。在[…]中,字符^ $ . + * / [ { } ( )将失去其含义。
《とほほ的正则表达式入门》

找到了类似的解释。

基于上述事情,重新解释一下模式 [.] + ,在方括号内,. 不是“任何一个字符”,而是被视为“点本身”,因此 [.] + 表示“重复出现一个或多个点的字符串”的正则表达式模式。

スクリーンショット 2023-08-17 232531.png

根据这一点修改上面的代码。

Pattern pattern = Pattern.compile("^Hello, (.+)$");

这就是。

System.out.println(matcher.group(1));
// Qiita!

你很好地展示出来了!

广告
将在 10 秒后关闭
bannerAds