[ruby-list:47325] Re: 無欲マッチの使い方

From: Hirotsugu Asari <asari.ruby@...>
Date: 2010-08-20 02:14:29 UTC
List: ruby-list #47325
あさりです。

On Aug 19, 2010, at 9:38 PM, AOKI Yoshihiro wrote:

> 青木と申します。
> 
> TeXの
> 
> {(A_{1}-q)}^{2n}=\\sum _{k=0}^{2n}_{2n}\\mrm{C}_{k}
> 
> という文字列に対して
> 
> /_(\{.+?\})\\mrm\{([CHP])\}_(\{.+?\})/
> 
> というマッチングをさせて
> 
> _{2n}\\mrm{C}_{k}
> 
> を得たいのですが,
> 
> #<MatchData "_{1}-q)}^{2n}=\\sum _{k=0}^{2n}_{2n}\\mrm{C}_{k}"
> 1:"{1}-q)}^{2n}=\\sum _{k=0}^{2n}_{2n}"
> 2:"C"
> 3:"{k}">
> 
> という結果になります。
> 使い方間違っていますでしょうか。
> 


間違っている、というか、意図していない所でマッチしていると思いますよ。

始めの \{.+?\} のところで、.はどの文字にもマッチしますから続きの\\mrm の直前まで全部取ってしまう訳ですね。

恐らくマッチさせたい正規表現は

/_(\{[^\}]+?\})\\mrm\{([CHP])\}_(\{[^\}]+?\})/

のように、\} を除いたキャラクタークラスを用いたものだと思います。

/_(\{[^\}]+?\})\\mrm\{([CHP])\}_(\{[^\}]+?\})/.match a
 => #<MatchData "_{2n}\\mrm{C}_{k}" 1:"{2n}" 2:"C" 3:"{k}"> 

それでは。

> ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-mswin32_71]
> 
> VisualStudio 2003でソースからコンパイルしたバイナリを使っており,
> 他のバージョンは調べていない状態で質問しています。
> 
> 1.9.2を試すべきでしょうか。
> 
> ----
> 青木
> 
> 


In This Thread