我一直在努力使用Java Regex 我希望我的正则表达式包含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]*)"
String regex = "(^[a-zA-Z | _])([a-zA-Z0-9\\-_]*)"
但是他们两个都给了我
hello
_Sau90-jds
A-next
答案 0 :(得分:3)
你的正则表达式中有一些东西会导致它无法正常工作。
[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-]*
任意次数匹配任何单词字符或连字符-
$
断言行尾的位置答案 1 :(得分:0)
让我们满足您的要求:
我的字符串必须以字母a-zA-Z或“_”开头,然后然后它只能包含字母,数字,下划线和连字符,这意味着没有白色空间。
并逐步构建正则表达式。
以字母a-zA-Z或“_”
开头
^[a-zA-Z_]
然后它只能包含字母,数字,下划线和连字符
[a-zA-Z\d_-]+
答案 2 :(得分:0)
Please try this :
public class Regex {
public static void main(String[] args) {
String regex = "^[a-zA-Z_][a-zA-Z0-9_-]*$";
String regexPhase2 = "(^[a-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));
}
}
}
}