Python 带嵌套“的正则表达式”;[quot;
我熟悉正则表达式,但这个复杂的例子让我很困惑。我试图理解这行代码在做什么:Python 带嵌套“的正则表达式”;[quot;,python,regex,Python,Regex,我熟悉正则表达式,但这个复杂的例子让我很困惑。我试图理解这行代码在做什么: r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B)' 它是一个试图检测正则表达式的代码片段,例如:/\s+/。我理解它,直到嵌套的[,\[,以及(对应项) (我需要将这段代码从Python移植到Java,在理解上面的工作原理以及为什么它不能像Java那样工作时遇到问题。)下面是一个分解版本,可能会有所帮助: / # Mat
r'/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B)'
它是一个试图检测正则表达式的代码片段,例如:/\s+/
。我理解它,直到嵌套的[
,\[
,以及(
对应项)
(我需要将这段代码从Python移植到Java,在理解上面的工作原理以及为什么它不能像Java那样工作时遇到问题。)下面是一个分解版本,可能会有所帮助:
/ # Match an opening slash
( # Followed by one or more...
\\. # Backslash followed by any character
| # or...
[^[/\\\n] # Something that's not a [, /, \, or newline
| # or...
\[ # A literal [, followed by any number of...
(
\\. # backslashes followed by any character
| # or...
[^\]\\\n] # something that's not a ], \, or newline
)*
] # and ending with a ]
)+
/ # And a closing slash
(
[gim]+\b # Followed by one or more of g, i, m
|
\B # or something that isn't a word boundary
)
你能解释一下
[^[/\\\n]
在做什么吗?它看起来像是在匹配任何不是左括号、正斜杠、反斜杠或换行符的字符。我不确定不转义左括号是否有效,但我想它并不是真的模棱两可。@Vinet为每个部分添加了解释。[^[/\\\n]
-为什么第二个[
没有进入下一行?为什么这不会影响]
?对不起,有这么多问题…因为一旦你进入字符类(在[]
中),另一个[
被视为字符类中包含的字符之一—有点像-
如果位于字符类的末尾,则不需要转义。因此,例如,[^[]
是“任何非[
的字符”,如果将其移植到Java的模式。编译(“…”)
然后您必须将每个\
加倍为Java中的字符串,将\
视为以下字符的转义,您需要使用compile()
方法来准确查看此处显示的内容。@AdrianPronk-是的,我已经这样做了。有关此问题的详细信息,请参阅此处: