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

标签 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);

最佳答案

更新

你想匹配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$";

See the regex demo

正则表达式匹配:

  • ^ - 字符串开始
  • a - 文字 a
  • .* - 0 个或多个任意字符(因为 (?s) 修饰符使 . 匹配任何字符,包括换行符)
  • sed - 文字字母序列 sed
  • $ - 字符串结束

关于java - 正则表达式匹配Java中字符串的开头和结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34310695/

相关文章:

java - 无法使用私钥签署数据,获取 swift 中 key 不支持的算法

java - 为什么 System.getProperty ("user.name");无法从命令行运行?

PHP - FFMPEG - 无法在媒体输出上应用多个正则表达式

c# - 我应该在运行 Regex.Replace 之前使用 Regex.IsMatch

ruby-on-rails - 为什么Ruby的正则表达式使用\A和\z而不是^和$?

java - 使用 Recycler View 调用 Api 加载更多

java - RxJava : calling unsubscribe from within onNext

java - 调试时找不到源

regex - 如何在 Bash 中将空格与正则表达式匹配?

Javascript 正则表达式禁用 Shift、Alt 和 Ctrl 键