Python和Java之间RegEx语法的差异
我在Python中有一个正在运行的正则表达式,我正在尝试转换为Java。 似乎实现中存在细微差别。
RegEx试图匹配另一个reg ex。 有问题的RegEx是:
/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B)
它遇到问题的其中一个字符串是: /\s+/;
reg ex不应该与结尾匹配;
。 在Python中,RegEx正常工作(并且与结尾不匹配;
但在Java中它确实包含;
。
问题:
- 我该怎么做才能让这个RegEx在Java中运行?
- 根据我在这里阅读的内容,此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,整场比赛,不包含) ;
)。 你的问题在别处。