正規表現を生成するPHPクラス

パッケージのクラス、最初のドラフトは、議論を開始するので、正規表現は、書くことが非常に困難です。

定期的に、提案を参照してください  https://github.com/CyC2018/CS-Notes/blob/master/notes/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE% E5%のBC%8F.md

 

クラスパターン{ 

    公共 $パターン =「」; 

    パブリック 静的 関数のinit(){ 

        戻り 新しい 静的(); 
    } 

    パブリック 関数の開始($ CHAR ){ 

        $この - >パターン= '^'。$ CHAR ;
        返す $これを
    } 


    パブリック 関数 $ CHAR ){ 

        $この - >パターン=   $ CHAR'$' ;
        返す $これを
    } 

    // 匹配次数
    パブリック 関数 のカウント$の範囲 = ヌル){ 

        場合IS_ARRAY$の範囲))$範囲 = ( ''、$の範囲)。

        もしIS_NUMERIC$範囲)|| strpos$範囲、 ''))$範囲 = '{'。$範囲「}」$この - >パターン=。   $範囲; 

        返す $これを
    } 



    パブリック 関数マッチ($パターン$ GET = ){ 

        $この - >パターン= '('(。。$取得 '': ':?')。$パターンを。 ')' ;
        返す $これを
    } 

    // 转义
    パブリック 関数エスケープ($ CHAR ){ 

        $この - >パターン= '\\'。$ CHAR ;
        返す $これを
    } 

    パブリック 関数アペンド($文字列$コメント = NULL ){ 

        $この - >パターン= $列;
        // 。の$ this - >の文字列のパターン= $($?コメント'?(#' $コメント')': '' ..);. 
        返します $この; 
    } 


    公共の 機能 フラッシュ(){ 

        $パターン = $この - > パターン;
         $この - >パターン= '' ; 

        戻り $パターン; 
    } 

    パブリック 静的 関数ヘルプ(){ 

        $ヘルプ = <<< 'ヘルプ' 
        [\ B] => ワード境界
        [\ B] => 非ワード境界
        [\ CX] => X指定された制御文字は、AZ値はA-であるかなければならないZの
        [\ D] =>デジタル、[0-9] 
        [\ D] =>非数値、[^ 0-9 ]。
        [\ F] => \ X0Cと\ CLに相当する改ページは、
        [\ N-] => 8進エスケープ値または後方参照を識別する。もし\前nは、少なくともn個の部分式をキャプチャし、nは後方参照です。nが8進数(0-7である場合にそうでない場合、)、次いでN進エスケープ値です。
        [\ R&LT] => x0dを\に相当キャリッジリターン、および\センチ
        [\ S] => [\ F \ N- \ R&LT \ T \ V]に相当する空白文字、
        [\ S] =>非ブランク[^に相当する文字、\ F \ N- \ R&LT \ T \ V] 
        [\ T] => 水平タブ、\ X09に相当し、\のcI 
        [\ V] => 垂直タブ。\ X0Bと同等とCK \ 
        [W \] [-ZA-z0-に相当=>文字、数字、下線、9_]は
        [\ Wがさ] =>非アルファベット、非数値、非下線。これは、[A-ZA-z0- ^と等価である 9_]
        [\ Xnの] => 文字は16進数表現と一致し、値は長い二つの数によって決定されなければなりません。\ x41Bを表すAB 
        [\ NUM] =>取得された参照をマッチングする"(。)\ 1"が二つの連続する同一の文字にマッチ
        [\ NM] =>進エスケープ値または後方参照を識別する。あなたは少なくともnmの\前nmからサブ表現を取得する必要がある場合は、NMは後方参照です。\少なくともN NMを取得する前に存在する場合には、nはヒールで後方参照文字メートルです。これらの条件が満たされない場合、nおよびmは進数字(0-7である場合)、8進数のエスケープ値NMと一致NM \ 
        [\ NML] => Nは、8進数(0-3)である場合、及びmおよびlは8進数字(0-7である)、一致する8進数のエスケープ値NML。
        [\ UN] => N個の進Unicode文字数字
ヘルプ; 
        エコー $ヘルプ; 

    } 


    // 正引き
    パブリック 関数フォワード($文字列$正 = trueに){

         $にこれを- >パターン= '(?'。(。$正: '=')? '!'。$文字列。 ')' ; 

        返す $これを

    } 


    // 反向查找
    公共 機能後方($文字列$正 = ){ 

        $この - >パターン= '(<?'。(。$正 '=':? '!'。)$文字列「。) " ; 

        返す $これを

    } 

    パブリック 関数 のexec$モード = NULL ){ 

        $モード = $モード$モード: '' ;
        $パターン = '/'。これを$ - >パターン。'/'。$モード

        リターン $パターン
    } 


    // 条件查找
    パブリック 関数条件($条件$文字列){ 

        $この - >パターン= '((?'。。$条件 '')。。$文字列 '') 

        返す $これを
    } 




} 

$ HTML = "<B>例</ B> <DIV ALIGN =左>この試験</ DIV>です" 

$パターン =柄::のinit() - > < '(アペンド- > APPEND( '\はS * ?'、 ' スペース'  - >アペンド(、 'プロパティ' '*>。?'  - >アペンド( 'コンテンツ' '*。?'  - > APPEND(「< \ / \ 1> ''トラックバックタグ名'  - > Execの(); 

エコー $パターン "\ N-。" ;
 preg_match_all$パターン$ HTML$ OUT );
 しますprint_r$ OUT)。

 

おすすめ

転載: www.cnblogs.com/zbseoag/p/11100662.html