我想在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)
更新
您想要匹配,因此如果和之间只有空格,则a sed
可以使用:a\\s+sed
a
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));
}
Run Code Online (Sandbox Code Playgroud)
现在,如果和 之间有任何内容a
sed
,请使用调和的贪婪标记:
Pattern pattern = Pattern.compile("(?s)a(?:(?!a|sed).)*sed");
^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
原答案
正则表达式的主要问题是\n
最后。$
是字符串的结尾,并且您尝试在字符串结尾之后再匹配一个字符,这是不可能的。另外,\\s
匹配空白符号,但您需要一个文字s
。
您需要删除\\
s 并\n
匹配.
换行符,并且建议使用*
量词以允许中间有 0 个符号:
pattern = "(?s)^a.*sed$";
Run Code Online (Sandbox Code Playgroud)
正则表达式匹配:
^
- 字符串的开头a
- 字面意思a
.*
- 0 个或多个任意字符(因为(?s)
修饰符匹配.
包括换行符在内的任意字符)sed
- 字面字母序列sed
$
- 字符串结尾 归档时间: |
|
查看次数: |
5452 次 |
最近记录: |