gpt4 book ai didi

单个字符后跟数字的Java正则表达式问题

转载 作者:行者123 更新时间:2023-11-29 03:01:48 25 4
gpt4 key购买 nike

我遇到了一个简单的 Java Regex 问题。我正在尝试识别与字符“p”+任何数字相匹配的任何模式,即 p1、p10、p100 等。

通过检查 http://regexr.com/ 处的实际正则表达式,我想要的实际表达式是 /(p\d+)/

虽然我在 JavaScript 中使用正则表达式没有问题,但在 Java 中却遇到了很多麻烦。

这是我实际尝试正常工作的代码部分:

boolean inBounds = (arrayPair.length  == 2);
String c = ("\(p\d+)\");
Pattern p = Pattern.compile(c);
Matcher m = p.matcher(arrayPair[0]);
boolean b = m.matches();

这个特定的字符串给了我一个无效的转义字符,根据这个(Invalid escape sequence)我应该使用双斜杠,这意味着该行应该更改为

String c = ("\\(p\\d+)\\");

这给我一个 Unmatched closing ')' near index 5\(p\d+)\"错误。

所以,我回到了http://regexr.com/并意识到我可以将表达式写为 /p\d+/

所以我又回到了Java并尝试了

String c = ("\\p\\d+\\");

这会在索引 2\p\d+\附近给出一个 Unknown character property name {\}

它指向'p\d'部分的'\'。

Sooooo 在另一个 stackoverflow 的回答中有人提到我应该使用\\instad of\for d。

String c = ("\\p\\\\d+\\");

这导致我在索引 2 附近出现错误 Unknown character property name {}\p\d+\

我是不是漏掉了什么?我开始对 RegEx 实现着迷......

最佳答案

只需使用以下模式:

"p\\d+"

您不需要对文字进行双重转义,只需对数字类进行转义即可。

Java 正则表达式中不需要开始和结束斜线,事实上它们会改变您的模式。

括号用于分隔反向引用的组,这在您说明的情况下似乎也没有用。

示例

String[] test = {"p0", "blap10foo", "p*&^", "d10"};
Pattern p = Pattern.compile("p\\d+");
for (String s: test) {
Matcher m = p.matcher(s);
if (m.find()) {
System.out.printf("Found: %s%n", m.group());
}
}

输出

Found: p0
Found: p10

关于单个字符后跟数字的Java正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34396966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com