Python和Java之间RegEx语法的差异

Vin*_*eet 6 python java regex

我在Python中有一个正在运行的正则表达式,我正在尝试转换为Java.似乎在实现中存在细微差别.

RegEx试图匹配另一个reg ex.有问题的RegEx是:

/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B)
Run Code Online (Sandbox Code Playgroud)

它遇到问题的其中一个字符串是: /\s+/;

reg ex不应该与结尾匹配;.在Python中,RegEx正常工作(并且与结尾不匹配;,但在Java中它确实包括;.

问题:

  1. 我该怎么做才能让这个RegEx在Java中运行?
  2. 根据我在这里阅读的内容,此RegEx应该没有区别.Python和Java中的RegEx实现之间是否存在差异列表?

Vin*_*eet 11

对于一小组案例,Java不会像Python那样解析正则表达式.在这种特殊情况下,嵌套[导致了问题.在Python中,您不需要转义任何嵌套,[但您需要在Java中执行此操作.

原始的RegEx(用于Python):

/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B)
Run Code Online (Sandbox Code Playgroud)

固定的RegEx(适用于Java和Python):

/(\\.|[^\[/\\\n]|\[(\\.|[^\]\\\n])*\])+/([gim]+\b|\B)
Run Code Online (Sandbox Code Playgroud)


tru*_*ity 5

b/w Java和Python的明显区别在于Java中你需要逃避很多字符.

此外,您可能会遇到匹配方法之间的不匹配,而不是实际正则表达式中的差异:

鉴于Java

String regex, input; // initialized to something
Matcher matcher = Pattern.compile( regex ).matcher( input );
Run Code Online (Sandbox Code Playgroud)
  • Java matcher.matches()(也Pattern.matches( regex, input ))匹配整个字符串.它在Python中没有直接的等价物.相同的结果可通过使用能够实现re.match( regex, input )regex该结尾$.
  • Java matcher.find()和Python re.search( regex, input )匹配字符串的任何部分.
  • Java matcher.lookingAt()和Python re.match( regex, input )匹配字符串的开头.

有关更多详细信息,请阅读Java的文档Matcher并与Python文档进行比较.

既然你说这不是问题,我决定做一个测试:http://ideone.com/6w61T 看起来java正在做你所需要的(组0,整场比赛,不包含的;).你的问题在别处.