当前位置: 首页 > 知识库问答 >
问题:

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

邹祺然
2023-03-14

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

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

应该匹配以“a”开头、以“se”结尾的字符串。这不起作用。我错过了什么吗?

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

我想提取的是从临时字符串中提取的“a se”。

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

                math = pr.matcher(temp);

共有2个答案

戚星腾
2023-03-14

您的temp字符串无法匹配模式(? s)^a.*se$,因为此模式表示您的temp字符串必须以字符a开头并以序列se结尾,情况并非如此。您的字符串在“se”序列之后有尾随字符。如果您只想提取整个字符串的… se部分,请尝试使用未锚定模式“a.*se”并使用Matcher类fin()方法:

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());
}
柯阳曦
2023-03-14

更新

您希望匹配< code>sed,因此如果< code>a和< code > sed 之间只有空格,您可以使用< code>a\\s sed:

String s = "afsgdhgd gfgshfdgadh a sed afdsgdhgdsfgdfagdfhh";
Pattern pattern = Pattern.compile("a\\s+sed");
Matcher matcher = pattern.matcher(s);
html" target="_blank">while (matcher.find()){
    System.out.println(matcher.group(0)); 
} 

查看IDEONE演示

现在,如果ase之间可以有任何东西,请使用经过钢化的贪婪令牌:

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
  • $ - 字符串结尾
 类似资料:
  • 问题内容: 什么正则表达式将匹配Java中的任何ASCII字符? 我已经尝试过: 但是发现它与我想要的很多东西都不匹配(例如空格,括号等)。我希望避免以如下格式显式列出所有127个ASCII字符: 问题答案: 我没用过但是我用过

  • 问题内容: 我有一个带有某些配置值的文本文件。以#开头的注释我试图找到一个正则表达式模式,该模式将找出以#开头的所有行。 因此,示例文件: 我想找到 因为只有这两行以#开头,所以我尝试了以下代码: 但是它总是输出空数组。有人可以帮忙吗? 问题答案: 你忘了多修饰符(你应该 不 使用单线改性剂;也是不区分大小写的修饰符是不必要的,因为还有ungreedy修改): 说明: 允许and 在行的开头/结尾

  • 问题内容: 给定以下内容: 我想捕捉: 什么Java正则表达式可以让我做到这一点? 我已经尝试过了,它对于“约翰·史密斯(123)”和“约翰·史密斯(123)(456)”都适用,但是对“约翰·史密斯”却不起作用。如何更改正则表达式以使其也可用于第一个输入? 问题答案: 您可以将第一个懒惰的人变成懒惰的人,然后用一个非捕获的可选组来包裹后面的部分: 参见正则表达式演示 实际上,如果将正则表达式与最后

  • 问题内容: 我在尝试将我的javascript regex经验转移到Python时遇到了麻烦。 我只是想让它工作: …但是它打印无。如果我做: 它匹配…默认情况下是否匹配字符串的开头?当匹配时,如何使用结果? 我如何进行第一场比赛?是否有比python网站提供的文档更好的文档? 问题答案: 隐式添加到您的正则表达式的开头。换句话说,它仅在字符串的开头匹配。 将在所有位置重试。 一般来说,建议您在需

  • 问题内容: 我在用Python将字符串中的数字匹配时遇到麻烦。尽管应该明确匹配,但甚至不匹配 或仅匹配。我的监督在哪里? 问题答案: 阅读文档:http : //docs.python.org/2/library/re.html#re.match 如果在零个或多个字符 开头 的 字符串 您要使用(或)

  • 我想解析以下字符串: 我正在使用,所以我这里缺少的是正确的正则表达式。规则是正则表达式必须: 隔离任何单个单词 任何用双引号括起来的子字符串都是匹配的 单词中的双引号必须忽略(稍后我将用空格替换它们)。 因此,结果匹配应该是: < li>w1 w"2 < li>w3 < li>| < li>w4 < li>w"5 < li>w6 w7 双引号是否包含在双引号括起来的子字符串中是无关紧要的(例如,1