Python和Java之间正则表达式语法的差异
我在Python中有一个可用的正则表达式,我正在尝试转换为Java。在实现上似乎有细微的差别
RegEx正在尝试匹配另一个RegEx。所讨论的RegEx是:
/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B)
它遇到问题的字符串之一是:/\s+/;
reg ex不应与结尾;
匹配。在Python中,正则表达式工作正常(并且与结尾;
不匹配,但在Java中,它确实包含;
)
问题如下:
- 我该怎么做才能让这个正则表达式在Java中工作李>
- 根据我读到的here这个正则表达式应该没有区别。Python和Java中的正则表达式实现之间有什么不同吗李>
# 1 楼答案
b/w Java和Python的明显区别在于,在Java中需要转义很多字符
此外,您可能会遇到匹配方法之间的不匹配,而不是实际的正则表达式符号之间的差异:
考虑到Java
matcher.matches()
(也称为Pattern.matches( regex, input )
)匹配整个字符串。它在Python中没有直接的等价物。同样的结果也可以通过使用re.match( regex, input )
和以$
结尾的regex
来实现李>matcher.find()
和Python的re.search( regex, input )
匹配字符串的任何部分李>matcher.lookingAt()
和Python的re.match( regex, input )
匹配字符串的开头李>有关更多详细信息,请阅读Java的^{} 文档,并与Python documentation进行比较
既然你说这不是问题,我决定做个测试:http://ideone.com/6w61T 看起来java正在做您需要的事情(组0,整个匹配项,不包含
;
)。你的问题在别处# 2 楼答案
对于一小部分情况,Java不像Python那样解析正则表达式。在这种特殊情况下,嵌套的
[
会导致问题。在Python中,您不需要转义任何嵌套的[
,但在Java中确实需要这样做原始正则表达式(用于Python):
固定正则表达式(适用于Java和Python):