(?x)
适用于当前括号集的末尾,或者整个正则表达式(如果它不在括号内)。 (?x:...)
适用于括号内的任何内容。
所以,真的,这个:
(?x: ... )
只是写这个的更简单的方法:
(?:(?x) ... )
它的工作原理是这样的:
/red (?i) blue ( ( (?x) ( (?-i) green ) yellow ) purple )/
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
'i' is turned on here... and here
^^^^^^^^^^^^^
but 'i' is turned off here
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'x' is turned on here
(?s-m:...)
是另一个快捷方式:它s
打开和m
关闭。您也可以将其写为(?:(?s)(?-m)...)
,但这很难阅读。
(?ix-ix:...)
i
是一个非常糟糕的例子,因为打开和关闭x
都没有任何意义。
例子:
这将匹配:
/one (?i)TWO THREE/.match 'one two three'
这不会,因为该i
标志仅适用于()
:
/one ((?i)TWO) THREE/.match 'one two three'
这也不会,并且与上面的相同,除了括号不会捕获:
/one (?i:TWO) THREE/.match 'one two three'
但这些将匹配:
/one (?i:TWO THREE)/.match 'one two three'
/one (?i:TWO) three/.match 'one two three'