正则表达式java具有特定的开始,然后除了一些字符之外的任何东西

时间:2017-11-21 15:05:57

标签: java regex string

我一直在努力使用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

3 个答案:

答案 0 :(得分:3)

你的正则表达式中有一些东西会导致它无法正常工作。

  • [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-]*任意次数匹配任何单词字符或连字符-
  • $断言行尾的位置

答案 1 :(得分:0)

让我们满足您的要求:

  

我的字符串必须以字母a-zA-Z或“_”开头,然后然后它只能包含字母,数字,下划线和连字符,这意味着没有白色空间。

并逐步构建正则表达式。

  1.   

    以字母a-zA-Z或“_”

    开头
    ^[a-zA-Z_]
    
  2.   

    然后它只能包含字母,数字,下划线和连字符

    [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));
            }
        }
    }
}