[英]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
,因此如果a
和sed
之间只有空格,则可以使用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));
}
现在, 如果a
和sed
之间可以有任何内容 ,请使用经过调节的贪婪令牌:
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 class
的find()
方法:
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.