Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';我不明白为什么这个正则表达式不';t字型(多行文本,以“限定符”开头)_Java_Regex - Fatal编程技术网

Java Can';我不明白为什么这个正则表达式不';t字型(多行文本,以“限定符”开头)

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

很难找出为什么这不起作用,我的研究表明它应该起作用。我正在尝试进行此逻辑匹配-行的开头有from:,然后行的开头发送了任意数量的字符:。请参阅代码,我认为它会打印找到的匹配项,但不会:

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:)这不符合我在问题中的要求。我会给你分数,让我更多地思考这个问题并找到更好的解决方案。谢谢!