Java 正则表达式否定
Java regex negation
我有一个匹配 2 个字符串的正则表达式,一个不匹配。
(^[IVX\.]+.*$)|(^[a-z\)]+.*$)
测试输入是:
a) prueba de inciso ( find() = true )
I. prueba de fraccion ( find() = true )
Prueba parrafo. ( find() = false )
我怎么能否定这个?获得:
a) prueba de inciso ( find() = false )
I. prueba de fraccion ( find() = false )
Prueba parrafo. ( find() = true )
您可以使用基于负前瞻的正则表达式:
^(?![IVX.]|[a-z)]).*$
^(?![IVX.]|[a-z)])
是否定前瞻,如果起始字符满足这些条件,即字符 class [IVX.]
或 [a-z)]
,则匹配失败
您可以使用否定前瞻来确保文本不以特定模式开头。
对两个锚点 (^$
) 使用 find()
并不是最佳选择。最好使用没有锚点的 matches()
。
你对编号列表的测试有点宽松,所以我把它变得更严格了。下面的示例显示了两个额外的文本来说明这一点。
Pattern p = Pattern.compile("(?![IVX]+\.\s|[a-z]+\)\s).*");
System.out.println(p.matcher("a) prueba de inciso").matches());
System.out.println(p.matcher("I. prueba de fraccion").matches());
System.out.println(p.matcher("Prueba parrafo").matches());
System.out.println(p.matcher("I am good").matches());
System.out.println(p.matcher("another test").matches());
输出
false
false
true
true
true
不要试图否定表达式,否定yourMatcher.find()
的结果。
Pattern yourPattern = Pattern.compile("^[IVX]+\.|^[a-z]\)");
Matcher yourMatcher = yourPattern.matcher("Prueba parrafo. ");
System.out.println(!yourMatcher.find());
^^^^ (negation)
可能是最简单的方法 - ^[^IVX.a-z)].*$
我有一个匹配 2 个字符串的正则表达式,一个不匹配。
(^[IVX\.]+.*$)|(^[a-z\)]+.*$)
测试输入是:
a) prueba de inciso ( find() = true )
I. prueba de fraccion ( find() = true )
Prueba parrafo. ( find() = false )
我怎么能否定这个?获得:
a) prueba de inciso ( find() = false )
I. prueba de fraccion ( find() = false )
Prueba parrafo. ( find() = true )
您可以使用基于负前瞻的正则表达式:
^(?![IVX.]|[a-z)]).*$
^(?![IVX.]|[a-z)])
是否定前瞻,如果起始字符满足这些条件,即字符 class [IVX.]
或 [a-z)]
您可以使用否定前瞻来确保文本不以特定模式开头。
对两个锚点 (^$
) 使用 find()
并不是最佳选择。最好使用没有锚点的 matches()
。
你对编号列表的测试有点宽松,所以我把它变得更严格了。下面的示例显示了两个额外的文本来说明这一点。
Pattern p = Pattern.compile("(?![IVX]+\.\s|[a-z]+\)\s).*");
System.out.println(p.matcher("a) prueba de inciso").matches());
System.out.println(p.matcher("I. prueba de fraccion").matches());
System.out.println(p.matcher("Prueba parrafo").matches());
System.out.println(p.matcher("I am good").matches());
System.out.println(p.matcher("another test").matches());
输出
false
false
true
true
true
不要试图否定表达式,否定yourMatcher.find()
的结果。
Pattern yourPattern = Pattern.compile("^[IVX]+\.|^[a-z]\)");
Matcher yourMatcher = yourPattern.matcher("Prueba parrafo. ");
System.out.println(!yourMatcher.find());
^^^^ (negation)
可能是最简单的方法 - ^[^IVX.a-z)].*$