2017-03-30 13 views
1

この例では、私はそれに多くの定義された要素を持つ大きな文字列を持っています part of example string here。 この例では、私の正規表現では正しいが、私は正規表現を更新する必要があるので、例ファイルからの一致を得る(最初(〜32)チルド、〜120 3preg_match_all - パターンと文字列の間の部分を取得

PRIEDE EGLE BERZS LAPU KOKI

<?php 

     $regex = '/~[1-9](.*?)\~120 3/s'; 
     preg_match($regex, $str, $matches); 

     echo '<pre>'; 
     print_r($matches); 
     exit(); 
    ?> 

そこで質問です: 私は方向tを設定する必要がありますどのように結果があることので、〜120 3から逆転文字列の一部を "逆"にする?私が〜120 3にマッチすれば、チルダ記号+数字〜〜[1-9]にマッチするまで、逆に120 3からすべての結果が得られますか?

私のcurrectの正規表現の結果といくつかの要素がマークされた添付画像: *私が知っている想像力の中で緑色の要素は逆の検索を開始します。 *グレー - 正しい結果。 *レッド - firest 〜120からの逆で発見されたものを事前に推奨事項については、3

enter image description here

感謝と一致します!

答えて

1

そこで質問です:

私は「逆」に文字列の一部を取得する方向を設定する必要がありますどのように?私は~120 3と一致する場合、私はチルド記号+数字 - ~[1-9]と一致するまで、逆の~120 3からすべての結果を得る?

ITが入力内ブースト正規表現マッチング方向を変更することはできません、しかし、あなたはマッチしたテキストを制限するために先読みを使用することができます。

Acc。あなたは必要に応じて、あなたが必要です

~[1-9]([^~]*(?:~(?![1-9])[^~]*)*)~120 3 

regex demoを参照してください。

詳細

  • ~[1-9] - あなたの最初の区切り
  • ([^~]*(?:~(?![1-9])[^~]*)*) - キャプチャグループ1マッチング:
    • [^~]* - チルダ以外の任意の0+文字
    • (?:~(?![1-9])[^~]*)* - 0+の配列:
      • ~(?![1-9])から19から
      • [^~]*から数字が続くされていないチルダ - 任意の0+チルダ
  • ~120 3以外の文字 - エンド・デリミタ

しかし開始時に数字とスペースが含まれているため、必要なものをキャプチャしません。あなたの開始区切り文字が~[\d\s]+で、先読み文字が(?![\d\s]+)である必要があります。 another demoを参照してください。

+1

すべてクリア!素晴らしい答えをありがとう! – Artis

関連する問題