2012-03-31 22 views
1

私が持っているPHPスクリプトを変更していますが、現在はネストされたフォームを出力しています。以下のような何か:入れ子のフォーム要素は削除しますが、入力要素は削除しない正規表現

<form name="input" action="html_form_action.asp" method="get"> 
<p>stuff here here, this may or may not be in a div, script, etc..</p> 
<form name="input" action="html_form_action.asp" method="get"> 
<div>stuff here possibilly</div> 
Username: <input type="text" name="user" /> 
<input type="submit" value="Submit" /> 
</form> 
<p>otherstuff this may or may not be in a div, script, etc..</p> 
</form> 

ネストされたフォームの無なし(IEはそれを嫌っており、基本的に動作を停止するフォームを原因)ではないので、私は、フォームの項目、ネストされたフォームの行を削除しますが、ないようにする必要があります。私は、ネストされたを削除する必要があります。

<form name="input" action="html_form_action.asp" method="get"> 

</form> 

ではなく、外<form</form>または入力またはものを提出します。

これは正規表現で可能ですか?

私がちょうど問題を見つけるのではなくフォームを正規表現したい理由は、二重フォームを取り除くためにいくつかの重要な再作業が必要であることを知っているからです...正規表現の解決策は今すぐです。

+2

です。欠陥のあるスクリプトの火を出してはいけません。スクリプト自体を修正してください。 –

+1

正規表現は使用できません。正規表現はネストを処理できません。その特定のタスクに対してパーサーをすばやく作成できます。 – saadtaame

+1

正規表現でHTMLを解析することはできませんhttp://stackoverflow.com/a/1732454/477127 – GordonM

答えて

3

に簡単ではありませんでしたが、ここで私はあなたがこの間違ったに近づいていると思うのコード

preg_replace('@(<form[^<>]+>)((.|[\r\n])*)(<form[^<>]+>)((.|[\r\n])*)(</form>)((.|[\r\n])*)(</form>)@','$1$2$5$8$10',$html); 
+0

これは別のフォームの中で1つのフォームでしか動作しません。より複雑なケースでは、幸運のためにテストしませんでした。 – abugnais

+1

私は努力のために+1を与えますが、HTMLをRegExで解析しないでください。 –

+0

@Truth質問は特に正規表現の質問としてタグ付けされていましたが、もっと良い方法があれば分かります:) – abugnais

関連する問題