我一直在努力解决 Java 正则表达式问题 我希望我的正则表达式包含 2 个特定字符,然后是与第二组匹配的任何内容
String regex = "(^[a-zA-Z | _])([a-zA-Z0-9\\-_^\\s]*)";
Pattern pattern = Pattern.compile(regex);
String s1 = "hello world";
String s2 = "_Sau90-jds";
String s3 = "5_idsjd";
String s4 = "A-next";
ArrayList<String> list = new ArrayList<>();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
for (String string : list) {
Matcher matcher = pattern.matcher(string);
if (matcher.find()) {
System.out.println(matcher.group(0));
}
}
我想要的结果:
_Sau90-jds
A-suivant
但我一直有
hello world
_Sau90-jds
A-suivant
我的字符串必须以字母 a-zA-Z 或“_”开头,然后只能包含字母、数字、下划线和连字符,这意味着不能有空格。
我尝试了String regex = "(^[a-zA-Z | _])([a-zA-Z0-9\\-_\\S]*)"
和字符串正则表达式=“(^[a-zA-Z | _])([a-zA-Z0-9\\-_]*)”
但他们都给了我
hello
_Sau90-jds
A-next
最佳答案
简介
您的正则表达式中存在一些问题导致它无法按您的预期工作。
[a-zA-Z | _]
表示匹配集合中存在的任何字符,因此,它匹配a-zA-Z |_
(字面意思)。因此,您实际上包含了|
字符以及空格字符的匹配项。
[a-zA-Z0-9\-_^\s]*
表示匹配集合中存在的任何字符,因此,这匹配a-zA-Z0-9 -_^\s
(字面意思)。因此,您实际上包含了^
字符以及任何空白字符的匹配项。- 此外,不添加
$
(行尾断言),您将匹配您在结果中看到的hello
。
代码
^[^\W\d][\w-]*$
基本上是一样的
^[a-zA-Z_][a-zA-Z0-9_-]*$
<小时/>
结果
输入
hello world
_Sau90-jds
5_idsjd
A-next
输出
_Sau90-jds
A-next
<小时/>
说明
^
断言位置位于行首[^\W\d]
匹配除数字之外的任何单词字符[\w-]*
匹配任意单词字符或连字符-
任意次数$
断言位置位于行尾
关于java - 正则表达式 java 具有特定的开头,然后是除某些字符之外的任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47416290/