我想在 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);
最佳答案
更新
你想匹配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));
}
参见 IDEONE demo
现在,如果 a
之间可以任何和 sed
,使用经过调和的贪婪 token :
Pattern pattern = Pattern.compile("(?s)a(?:(?!a|sed).)*sed");
^^^^^^^^^^^^^
参见 another IDEONE demo .
原始答案
正则表达式的主要问题是 \n
在末尾。 $
是字符串的结尾,你试图在字符串结尾之后再匹配一个字符,这是不可能的。另外,\\s
匹配一个空白符号,但你需要一个文字 s
.
您需要删除 \\
s 和 \n
并制作.
匹配换行符,建议使用 *
允许中间有 0 个符号的量词:
pattern = "(?s)^a.*sed$";
正则表达式匹配:
-
^
- 字符串开始 -
a
- 文字a
-
.*
- 0 个或多个任意字符(因为(?s)
修饰符使.
匹配任何字符,包括换行符) -
sed
- 文字字母序列sed
-
$
- 字符串结束
关于java - 正则表达式匹配Java中字符串的开头和结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34310695/