2012-03-22 7 views
1

すべての隠しタグ(および終了タグ)を正規表現で削除しようとしていますが、問題は1つあります。見つかったすべての要素に対して "<>"の後ろに残ります。HTMLタグを検索するための正規表現は、PHPの背後に空のタグを残します

私は空白と私の隠されたフィールドを置き換えるために、これを使用しています:

$saveContent = preg_replace('<input type="hidden" .*? />', "", $saveContent); 
$saveContent = preg_replace('</form>', "", $saveContent); 

それはちょうど「<> <> <>」(2つの隠しフィールドと終了フォームタグ)を戻します。私は<の文字列を置換しようとしましたが、どちらも動作しないようです

私には何かが欠けていますか?あなたが..スラッシュをエスケープと修飾子がhttp://php.net/manual/en/reference.pcre.pattern.modifiers.php

$saveContent = preg_replace('/<input type="hidden" .*? \/>/i', "", $saveContent);  
$saveContent = preg_replace('/<\/form>/i', "", $saveContent); 
+3

を使用すると、正規表現でHTMLを解析しようとするたび、あなたは子猫の叫びを作ります。 http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – GordonM

答えて

0

は、(私が知らなかったことを)何らかの理由で<が判明し、>記号はだけ選ばれた少数のため、エンティティに変換されていました。

これらのエンティティを確認したところ、文字列が正しいシンボルに置き換えられ、機能しました。

+0

あなたの質問の正規表現は、@ Qtaxが説明しているように、まだ間違っています。 ''〜〜 ''のように、正規表現の区切り文字を追加しましたか? –

1

、例えば

if (preg_match('%</form>%', $subject)) { 
    # Successful match 
} else { 
    # Match attempt failed 
} 
+0

これは何もしていないようです。そこにフォームタグが残されます。 – adamzwakk

+0

単に '> /'で '>/i'を置き換えてみてください。 –

+1

どのように大文字と小文字を区別するヘルプですか? –

0

を動作させるために、私の記憶が正しければ実用的では読めなくなり、すべてのことエスケープを避けるためにあなたが%の間のパターンを置くことができますスラッシュを追加する必要が

+0

サイコロはありませんが、そこにいてもは見つかりません。 – adamzwakk

+0

それはちょっと変だ:)文字通りそこに私はそれがある種のエンコードの問題だと思っていますか?一致のような単純なフォームを試してみて、「フォーム」を作成して<, then >などを追加しますか? – buckley

0

あなたが適切通常"/regex/"のようにPHPで行われている文字列、内部表現を引用していないということです(正規表現でHTMLに一致するようにしようとすることを除いて)この

$content = '<input type="hidden" name="abc" /> abc <input type="hidden" name="abc" />'; 
preg_replace('#<input type="hidden"[^>]+>#', '', $content); 
2

問題を試してみてください、しかし、任意の文字をスラッシュの代わりに使用できます(例:"~regex~")。あなたのケースでは

<は終了引用符>(すなわち"<regex>")、これpreg_*でそれが有効作り、あなたにすべてのエラーを与えていないになります引用文字、です。例えば

preg_replace('</form>', "", $str) 

は、空の文字列で/formを置き換えるすべてが

preg_replace('~/form~', "", $str) 

preg_replace('/\/form/', "", $str) 

と同じです。

あなたが望んでいたものの:

preg_replace('~</form>~', "", $str) 
+0

むしろ '<' and '>'は*正規表現の区切り文字*です。 "クォート文字"は、正規表現全体を囲む引用符( ''や '')や、エスケープ文字 '' '' '' 'を簡単に参照できます。 –

関連する問題