Java正则表达式 "\A"边界匹配

标签 java regex matching

我正在寻找有关此正则表达式的帮助。我有不同长度的字符串,并且只想匹配开头。字符串中有换行符,因此看起来\A 是正确的方法。

我想要正则表达式能够匹配以下所有情况:

OPTIONAL: [any whitespace/newlines/etc] 
OPTIONAL: <?.*?>
OPTIONAL: [any whitespace/newlines/etc]
MANDAORY: <lemon>
OPTIONAL: anything afterwards.

由于字符串可能会变得很大,因此最终的可选匹配会使速度变得非常慢。

我最初的解决方案是:

"(^\\s*<?.*?>\\s*<lemon>)[\\s\\S]*|(^\\s*<lemon>.*)[\\s\\S]*"

这非常复杂,并且匹配整个字符串,而不仅仅是开头

我目前最好的尝试是:

"\\A(?:\\s*<?.*?>)?\\s*<lemon>"

但是,如果 mon> 之后有任何内容,则匹配失败。

有人知道为什么吗? \A 上的示例很少,我无法让它工作。

最佳答案

您缺少的是分组的概念。我已经将你的正则表达式放入 ( 中括号

 Pattern p = Pattern.compile("(\\A(?:\\s*<?.*?>)?\\s*<lemon>).*");
 Matcher m = p.matcher("   <?.*?>    <lemon> hi   ");
 if (m.find()) {
    System.out.println(m.group(1)); 
 }

第 0 组将整个表达式

第 1 组将满足您的需要。

这个tutorial可能会解释团体如何运作

I am simply looking for a way to get a binary answer similar to String.matches(), which upon finding a match stop going through the string

拿这个:\\A(?:\\s*<?.*?>)?\\s*<lemon>(.*?)没有分组

关于Java正则表达式 "\A"边界匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18148756/

相关文章:

java - 是否可以在 DockerComposeContainer 的 docker-compose 文件中使用本地 Docker 镜像?

java - SWT.Table 使用相同的代码表现不同 (Eclipse RCP)

java - 正则表达式不喜欢 out#

mysql - 在 where 子句 mysql 中完全匹配 utf8 中的单词

Python pandas 计算与索引列完全匹配的列

sql - 匹配多个字段组合的记录

java - 将字符串放入preparedStatement中

java - Firebase 检查值

javascript - 如何从包含字符串的对象中构建数组?

javascript - 正则表达式让我感到困惑,为什么它不能正确解析?