Java Can';我不明白为什么这个正则表达式不';t字型(多行文本,以“限定符”开头)
很难找出为什么这不起作用,我的研究表明它应该起作用。我正在尝试进行此逻辑匹配-行的开头有from:,然后行的开头发送了任意数量的字符:。请参阅代码,我认为它会打印找到的匹配项,但不会:Java Can';我不明白为什么这个正则表达式不';t字型(多行文本,以“限定符”开头),java,regex,Java,Regex,很难找出为什么这不起作用,我的研究表明它应该起作用。我正在尝试进行此逻辑匹配-行的开头有from:,然后行的开头发送了任意数量的字符:。请参阅代码,我认为它会打印找到的匹配项,但不会: import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test2 { public static void main(String[] args) { Pattern lineDi
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test2 {
public static void main(String[] args)
{
Pattern lineDividerGuessMatchPattern = Pattern.compile("(?m)(?i)(^from:)(.*?)(^sent:)");
String testString = "cheese \n"
+ "from: cheese\n"
+ "sent: bacon";
Matcher m = lineDividerGuessMatchPattern.matcher(testString);
if(m.find())
System.out.println("Match found");
}
}
您还需要(?s)
标志(模式)来制作
匹配行终止符。这会找到一个匹配项:
Pattern lineDividerGuessMatchPattern =
Pattern.compile("(?msi)(^from:)(.*?)(^sent:)");
您还需要(?s)
标志(模式)来制作
匹配行终止符。这会找到一个匹配项:
Pattern lineDividerGuessMatchPattern =
Pattern.compile("(?msi)(^from:)(.*?)(^sent:)");
我正在尝试进行此逻辑匹配-行首有发件人:
然后任何数量的字符,行首有发送:
您应该使用(from:[^\n]*\n发送:)
这是
模式说明:
( group and capture to \1:
from: 'from:'
[^\n]* any character except: '\n' (newline) (0 or more times)
\n '\n' (newline)
sent: 'sent:'
) end of \1
我正在尝试进行此逻辑匹配-行首有发件人:
然后任何数量的字符,行首有发送:
您应该使用(from:[^\n]*\n发送:)
这是
模式说明:
( group and capture to \1:
from: 'from:'
[^\n]* any character except: '\n' (newline) (0 or more times)
\n '\n' (newline)
sent: 'sent:'
) end of \1
另一件事是在正则表达式中添加一个换行符
\n
,以匹配“嘿,这里有一行结尾”@Revan:这也行。不过,^
已经确保遇到新行。整个问题最终都成了xy问题,我最初尝试使用(?s),但当时另一件事把它搞砸了。另一件事是在正则表达式中添加新行字符\n
,以匹配“嘿,这里有一行结尾”@瑞文:那也行。^
已经确保遇到了一个新行。整个问题最终成为了一个xy问题,我最初尝试使用(?s),但当时另一件事把它搞砸了。按照规则,您只需从以下位置查找:
任何内容,然后在下一行开始:
。尽可能保持正则表达式的简单性。我认为您错过了from必须作为行的开始的部分,但我确实相信您的答案能够更好地解决整个问题,如果您能够解决的话。我去掉了DOTALL并使用了它,我认为它更好地解决了我的问题,因为要求from和sent之间只有一个换行符-(?mi)(^from:)(.*)\n(^sent:)这不符合我在问题中的要求。我会给你分数,让我更多地思考这个问题,并找到更好的解决方案。谢谢!根据规则,你只需要从:中查找任何内容,然后在下一行开始:
。尽可能简化正则表达式。你错过了从必须是st的部分我认为行的艺术,但我相信你的答案能更好地解决整个问题,如果你能解决的话。我去掉了DOTALL并使用了这个,我认为它能更好地解决我的问题,因为有一个要求,在from和sent之间只有一个换行符-(?mi)(^from:)(.*)\n(^sent:)这不符合我在问题中的要求。我会给你分数,让我更多地思考这个问题并找到更好的解决方案。谢谢!