正規表現道場 Part2 (393レス)
上下前次1-新
抽出解除 レス栞
103(2): 2014/01/30(木)07:11 ID:??? AAS
・範囲内で文字列を含まない正規表現
$_ = "zzzABC XYDEFzzDEFz";
if ( m/
# Perl 5.10 以降で有効
ABC
[^XAD]*
(?:
(?!XYZ|ABC|DEF).
[^XAD]*
)*
(*PRUNE) # バックトラックステートの削除
(*SKIP) # 次回の走査開始位置をここに飛ばす
(?:XY?)? # XYZとDEFの競合を想定した取りこぼし回収
DEF
/xgsiaap )
{ print "match! <".${^MATCH}.">"; }
else
{ print "no match."; }
>>102
修正乙!
105(1): 2014/01/31(金)02:30 ID:??? AAS
>>103
(*VERB:ARG) ってのは知らなかったなぁ.
今回のケースだと(*PRUNE)は(?>pattern)で置き換えができると思うが,
マニュアルの 「(*PRUNE) は (?>pattern) 単独では表現できないケースを扱うために使えます。」ってのがどういうケースなのか想像できん.
>>104
修正ありがと.
元のやつだと後ろを吸い込んじゃうからマッチ位置が先に進んでしまう.
そうならないように先読みを使うと,先読み部分は後方参照に含まれなくなるから,先読みの中で改めて補足が必要って感じだね.
107(1): 2014/01/31(金)10:29 ID:??? AAS
>>103
「XYZとDEFの競合」ってのはXYZの後半部分がDEFの前半部分と同じ場合ってことかな?
例えば,xydとdef,とか,xdeとdefみたいな
もしそういう,後半部分と前半部分が重なる場合を考え出すと,話がもう少しややこしくなる.
つまり,ABCDとCDEFがキーだったときに,ABCDEFという文字があったら,
それはABCD+EFと解釈するのか,AB+CDEFと解釈するのか,という問題.
その解釈がすべて前方優先なのか,すべて後方優先なのか,それともキーの相互の優先度で決まるのか,
あるいは,あらゆる可能性を許すのか,あらゆる可能性を許さないのか.
キー自身が重なる場合もある.
例えば,ABCABみたいなキーだったとき,ABCABCABは,ABCAB+CABなのか,ABC+ABCABなのか.
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.681s*