2016-06-21 3 views
0

regexp(および/またはphp)だけで、特定のパターンの外にあり、特定の他のパタ​​ーン内にある特定のパターン(PHPの場合は再帰的な意味では? ?要素の属性空間内ではなく、表示可能なHTML内で{Tags}をどのように一致させることができますか?

アイデアは、表示されているhtmlテキストの1行に> {ThisSpace} <で、< {ThisSpace}内ではないタグと一致させたいと考えています。

、1行のテキストの例は

<div {IgnoreThis} id="{AndIgnoreThisOne}">I want to be able to only get {TheBracketTagsWithin} the visible html areas, excluding title and textarea and any html tag similar to those tags </div {AlsoIgnoreThese}> 

次の半分のHTMLタグミックスコンボである私は、このために私自身の正規表現を作ってみました、しかし..私はPHPのコンボを使用することができます失敗してきた&正規表現が、ここでは...

を何かが足りないか、ここで何かを理解していないが、私は正規表現

(?<!\<\!--|\{|\<){([a-zA-Z0-9]*?)}(?!--\>|\}|\>) 

のためにしようとしています。これは、トンを無視するどのような作品です彼は次の文字があるために、divの最後にも{また、鈍化しています}、この正規表現を見つけられるまで見えるように修正することはできません。

これはDOMパーサを必要とする別の問題かもしれないことに気づいていますが、私は知っています... "あなたはHTMLのDOM解析をRegExp、Newbで行います!"質問はどうすればの{タグ}に一致する文字や文字の位置などを表示することができますか?そしてDOMパースがなければ、エラーが出ているか、壊れたHTMLのために私に何の応答も与えないのですか?

私が正しい方向に向いているとはいえ、どんな助けにもなります。

ありがとうございます!

-EDIT-

私は言及を忘れてしまった何か、これはHTMLの一行であることから、常に(それが将来のライン上にあってもよい)htmlタグの終了がないこともあり、逆の場合には必ずしも開始タグと終了タグの両方が存在するとは限りません。開始タグも終了タグも持たない行については、「htmlスペース内にある」または「属性スペース内にある」というアカウントを持つソリューションが既に用意されているので、htmlの開始タグまたは終了タグのない行{BracketTag}もキャプチャする必要があります。

私は

答えて

0

...答えは右の私の指の先端にあるように感じるが、それは正しい方向にだけ届くで解決>の各インスタンスを検索するために正規表現を使用しないのはなぜが... <あなたの現在のコードを使用して、各一致のタグを検索しますか?

EDIT:>のためのルックビハインド(?<=>)(?:.*?)(?<={)(.*?(?=}))(?:.*?)(?:.*?)(?=})(?:.*?)(?=<)

、{、最大ですべてを取り込む}にすべてをバックアップ、<まで非キャプチャすべての後、非キャプチャグループ:このような何かを試してみてください。すべての可能な結果を​​得るためにグローバル修飾子を付けたいと思います。あなたはそれは私がそれを動かすことができれば

+0

これは、より多くの答え – Gordon

+0

謝罪よりもコメントのように感じるが、私が見るものとPHPに変換する必要があります – Elenchus

+0

ああ、どうやら私は50担当者 – Elenchus

0
$str = '<div {IgnoreThis} id="{AndIgnoreThisOne}">I want to be able to only get {TheBracketTagsWithin} the visible html areas, excluding title and textarea and any html {tag} similar to those {tags} </div {AlsoIgnoreThese}>'; 
$str = preg_replace("/<.*?>/", "", $str); 
preg_match_all("/{.*?}/", $str, $matches); 
foreach ($matches[0] as $match) echo $match . "\n"; 
関連する問題