2

次のようなものを特定するには:

[stack][overflow]
or
[is great!]

そうです:

/\[([^\]]+)\](\[([^\]]+)\])?/.match(s)

今、私はこれを拡張して、 if [...][...]or[...]\認識されないようにしたいと考えています:

\[stack][overflow]   # => Should not match
\[is great!]         # => Should not match
a \[b][c] \[d] [e]   # => Should match [e]

これを達成するために正規表現を拡張するにはどうすればよいですか?

Ruby 1.9.2 と Ruby 1.8.7 の両方で動作するはずです。

4

2 に答える 2

3

代わりにこれを行うことができます:

/(^|[^\\\]])(\\\\)*(\[([^\]]+)\]){1,2}/

(追加(^|[^\\])(\\\\)*)

これは、件名の文字列の先頭 ( の前に何もない場合[)、または を除く任意の文字\と、それに続く任意の数のエスケープされたのいずれかに一致することによって機能し\\ます。

[1]       => yes
[1][2]    => yes
x[1]      => yes
x[1][2]   => yes
\[1]      => no
\[1][2]   => no
\\[1]     => yes
\\[1][2]  => yes
\\\[1]    => no
\\\\[1]   => yes
\\\\\[1]  => no
\\\\\\[1] => yes    
...

ここで試してみてください: http://rubular.com/r/ST9qOVjUXe

于 2011-09-13T11:48:12.417 に答える
3

私はこの正規表現を思いつきました:

/([^\\\[\]]|^)\[([^\]]+)\](\[([^\]]+)\])?/

ここで試すことができます:

http://rubular.com/r/L796M2pcG7

それが役立つことを願っています。

編集: あなたのコメントに反応しました 編集: 次のコメント

于 2011-09-13T12:04:38.943 に答える