パッケージのクラス、最初のドラフトは、議論を開始するので、正規表現は、書くことが非常に困難です。
定期的に、提案を参照してください 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)。