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

标签 java regex string

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

相关文章:

php - symfony2 实体验证正则表达式 a-z A-Z 0-9

string - 如何将多个字符列组合成 R 数据框中的单个列

c - free() 提示无效指针

python - 从文本中获取句子的正则表达式构造 - Python

java - 使用 getResource 时出现 NullPointerException

java - 构建DOM文档对象时文件过早结束错误

Java - 提取后缀和前缀中间的字符串

javascript - 正则表达式仅搜索/替换文本,不在 HTML 属性中

java - JTree,始终显示 "edit mode"中的所有节点

java - Android:FragmentManager 版本不匹配