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

时间:2015-12-16 11:20:59

标签: java regex

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

pattern = "^\\a.+\\sed$\n";

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

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

我想要提取的是临时字符串中的“a sed”。

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

                math = pr.matcher(temp);

2 个答案:

答案 0 :(得分:3)

<强>更新

您希望与a sed匹配,因此如果a\\s+seda之间只有空格,则可以使用sed

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

请参阅IDEONE demo

现在,如果在ased 之间可以有任何,请使用驯服的贪婪令牌:

Pattern pattern = Pattern.compile("(?s)a(?:(?!a|sed).)*sed");
                                         ^^^^^^^^^^^^^  

请参阅another IDEONE demo

原始回答

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

您需要移除\\\n并使.与换行符匹配,并且建议使用*量词来允许介于0之间的0个符号:

pattern = "(?s)^a.*sed$";

<强> See the regex demo

正则表达式匹配:

  • ^ - 字符串开头
  • a - 文字a
  • .* - 0个或更多任何字符(因为(?s)修饰符使.匹配包含换行符的任何字符)
  • sed - 字母序列sed
  • $ - 字符串结尾

答案 1 :(得分:1)

您的temp字符串与模式(?s)^a.*sed$不匹配,因为此模式表明您的temp字符串必须以字符 a strong>和结束序列 sed ,但事实并非如此。在&#34; sed&#34;之后,你的字符串有尾随字符。序列。 如果您只想提取整个字符串的 a ... sed 部分,请尝试使用unanchored模式&#34; a。* sed&#34;并使用find()的{​​{1}}方法:

Matcher class