我正在寻找这个正则表达式的一些帮助。我有不同长度的字符串,并且只想匹配开头。这些字符串中有换行符,所以它似乎是\ 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
上的示例很稀疏,我无法让它工作。
答案 0 :(得分:0)
您缺少的是分组的概念。我已经把你的正则表达式放到(
括号
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可能会解释群组如何运作
我只是想找到一种方法来获得类似于String.matches()的二进制答案,在找到匹配停止字符串时
这样做:\\A(?:\\s*<?.*?>)?\\s*<lemon>(.*?)
没有分组