正则表达式匹配Java中字符串的开头和结尾

San*_*hah 6 java regex

我想在Java中使用Regex提取类似字符串.我目前有这种模式:

pattern = "^\\a.+\\sed$\n";
Run Code Online (Sandbox Code Playgroud)

假设匹配以"a"开头并以"sed"结尾的字符串.这不起作用.我错过了什么 ?

删除模式末尾的\n行并将其替换为"$":仍然没有得到匹配.正则表达式看起来是合法的.

我想要提取的是临时字符串中的"a sed".

String temp = "afsgdhgd gfgshfdgadh a sed afdsgdhgdsfgdfagdfhh";
                pattern = "(?s)^a.*sed$";
                       pr = Pattern.compile(pattern);

                math = pr.matcher(temp);
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 3

更新

您想要匹配,因此如果和之间只有空格,则a sed可以使用:a\\s+sedased

String s = "afsgdhgd gfgshfdgadh a sed afdsgdhgdsfgdfagdfhh";
Pattern pattern = Pattern.compile("a\\s+sed");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(0)); 
} 
Run Code Online (Sandbox Code Playgroud)

查看IDEONE 演示

现在,如果和 之间任何内容ased,请使用调和的贪婪标记:

Pattern pattern = Pattern.compile("(?s)a(?:(?!a|sed).)*sed");
                                         ^^^^^^^^^^^^^  
Run Code Online (Sandbox Code Playgroud)

查看另一个 IDEONE 演示

原答案

正则表达式的主要问题是\n最后。$是字符串的结尾,并且您尝试在字符串结尾之后再匹配一个字符,这是不可能的。另外,\\s匹配空白符号,但您需要一个文字s

您需要删除\\s 并\n匹配.换行符,并且建议使用*量词以允许中间有 0 个符号:

pattern = "(?s)^a.*sed$";
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

正则表达式匹配:

  • ^- 字符串的开头
  • a- 字面意思a
  • .*- 0 个或多个任意字符(因为(?s)修饰符匹配.包括换行符在内的任意字符)
  • sed- 字面字母序列sed
  • $- 字符串结尾