gpt4 book ai didi

java - 正则表达式 java 具有特定的开头,然后是除某些字符之外的任何内容

转载 作者:行者123 更新时间:2023-12-01 20:05:44 24 4
gpt4 key购买 nike

我一直在努力解决 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
<小时/>

代码

See regex in use here

^[^\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/

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