繁体   English   中英

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

[英]Regex to match the beginning and the end of a string in Java

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

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

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

删除了模式末尾的\\ n行,并将其替换为“ $”:仍然没有匹配项。 正则表达式从我这边看起来很合法。

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

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

                math = pr.matcher(temp);

更新

您想要匹配a sed ,因此如果ased之间只有空格,则可以使用a\\\\s+sed 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演示

现在, 如果ased之间可以有任何内容 ,请使用经过调节的贪婪令牌:

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

参见另一个IDEONE演示

原始答案

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

您需要删除\\\\ s和\\n并进行制作. 匹配换行符,并且建议使用*量词允许介于0之间的符号:

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

见正则表达式演示

正则表达式匹配:

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

您的temp字符串不能与模式(?s)^a.*sed$匹配,因为此模式表明您的temp字符串必须以字符a 开头序列sed 结束 ,而事实并非如此。 您的字符串在“ sed”序列之后具有尾随字符。 如果只想提取整个字符串的... sed部分,请尝试使用未锚定的模式“ a。* sed”,并使用Matcher classfind()方法:

Pattern pattern = Pattern.compile("a.*sed");
Matcher m = pattern.matcher(temp);
if (m.find())
{
    System.out.println("Found string "+m.group());
    System.out.println("From "+m.start()+" to "+m.end());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM