Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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模式匹配吗?_Java_Regex_Pattern Matching_Multiline - Fatal编程技术网

为什么不是';这不是多行Java模式匹配吗?

为什么不是';这不是多行Java模式匹配吗?,java,regex,pattern-matching,multiline,Java,Regex,Pattern Matching,Multiline,我以为我已经了解了这些分隔符在Java正则表达式上的匹配方式,以及多行修饰符如何影响它,但最终我无法获得这个简单的代码示例来提供预期的结果 同时阅读一些关于SO的类似问题,解决方案总是使用(?m)修饰符。那么,这个例子有什么问题 public class Test{ public static void main(String []args){ System.out.println("foo\nTAG\nbar".matches("(?m)^TAG$") ? "mat

我以为我已经了解了这些分隔符在Java正则表达式上的匹配方式,以及多行修饰符如何影响它,但最终我无法获得这个简单的代码示例来提供预期的结果

同时阅读一些关于SO的类似问题,解决方案总是使用
(?m)
修饰符。那么,这个例子有什么问题

public class Test{

     public static void main(String []args){
        System.out.println("foo\nTAG\nbar".matches("(?m)^TAG$") ? "matches" : "dont match");
     }
}

指纹不匹配。可以在

匹配处测试。方法尝试匹配整个输入字符串。所以,像下面这样更改您的正则表达式以获得匹配。在多行模式下,
(?m)
,点与换行符不匹配。要匹配任何字符(包括换行符),需要使用与空格或非空格字符匹配的
[\S\S]

在Dotall模式下,
(?s)
,您可以简单地使用
*
匹配任何字符(包括换行符)零次或多次

修改器甚至可以组合为
(?ms)
,以充分利用这两种模式的优点

System.out.println("foo\nTAG\nbar".matches("(?m)[\\s\\S]*^TAG$[\\s\\S]*") ? "matches" : "dont match");
System.out.println("foo\nTAG\nbar".matches("(?s).*?(^|\n)TAG(\n|$).*") ? "matches" : "dont match");
System.out.println("foo\nTAG\nbar".matches("(?ms).*?^TAG$.*") ? "matches" : "dont match");
输出:

matches
matches
matches

不确定发生了什么,但是
匹配
尝试匹配整个字符串,而不是其中的一部分。哦,上帝。这就是问题所在。请贴出答案