西山和弘さん,

なーるほど.これならうまく行きますね.私はこれまで先読みとか後読みはよく理解できなくて使ったことはなかったのですが,ようやく使い道がわかったような気がします.

ご教示の例で言うと,
  (?!\2)\w.*
というのは,次の文字列は \2 ではないよね,そのうえでマッチポイントを動かさずに,\w.*
にマッチするよね,ということを言っていると理解しましたが,これで間違っていないでしょうか?

2017年6月4日 16:45 Kazuhiro NISHIYAMA <zn / mbf.nifty.com>:

> 西山和広です。
>
> On Sun, 04 Jun 2017 15:32:02 +0900,
> 俊(とし) wrote:
> >
> > コメントありがとうございます.確かに文字クラスの中では私の記法は意図したようには動かない気がします.とすると,文字ク\
> ラスの中に後方参照を入れ込むことはそもそもできないのでしょうか?
>
> 文字クラスは1文字にマッチするものなので、文字列にマッチする後方参照を
> 中に入れるのは無理だと思います。
>
> 最初の例だけ見直して、ちょっと考えてみたのですが、先読みを組み合わせて
> (?!\2)\w のようなやり方でどうでしょうか。
>
> >> /\A((\w)\2+)((?!\2)\w.*)\Z/.match("aaabcd")
> => #<MatchData "aaabcd" 1:"aaa" 2:"a" 3:"bcd">
> >> /\A((\w)\2+)((?!\2)\w.*)\Z/.match("aaa bcd")
> => nil
>
> > それから \Z の使い方ですが,私が出した例では \z のほうが適切と思いますが,一般的に
> > IO からの入力では末尾に改行が入ったままになっていることもあるので,安全策として \Z にしているという程度の意味です.
>
> なるほど。
>
>
> --
> |ZnZ(ゼット エヌ ゼット)
> |西山和広(Kazuhiro NISHIYAMA)
>



-- 
俊(とし)
* 望湖庵日記 http://griffin.cocolog-nifty.com/lakesidedairy/