Python和Java之间RegEx语法的差异

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

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

/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B) 

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

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

问题:

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

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

原始的RegEx(适用于Python):

 /(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B) 

修复的RegEx(适用于Java和Python):

 /(\\.|[^\[/\\\n]|\[(\\.|[^\]\\\n])*\])+/([gim]+\b|\B) 

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

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

鉴于Java

 String regex, input; // initialized to something Matcher matcher = Pattern.compile( regex ).matcher( input ); 
  • 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,整场比赛,不包含) ; )。 你的问题在别处。