1

すべてのタグをどのように一致させるかを知りたいのですが"<?""?>" 例:

"<?root?><abcd>"

私は思った:

preg_match_all(/[^(<\?)(\?>)]+/, $str, $match);

しかし、rsultは["root", "abcd"]代わりに私はそうなりたいと思っていました["<abcd>"]

ありがとう'!

4

3 に答える 3

3
<(?!\?).+?(?<!\?)>

それでうまくいくはずです。

説明:

<    -- A <
(?!  -- Not followed by: (See link 1 - Positive and Negative Lookahead)
  \? -- A ?
)
.+?  -- As few characters as necessary (See link 2 - Laziness Instead of Greediness)
(?<! -- Not preceded by: (See link 1 - Positive and Negative Lookbehind)
  \? -- A ?
)
>    -- A >
  1. 見回す
  2. 繰り返し

IIRC、あなたはこれを行うでしょう:

preg_match_all('/<(?!\?).+?(?<!\?)>/', $str, $match);

ただし、正規表現を使用してHTMLを解析することはお勧めできません

于 2012-06-07T13:03:52.250 に答える
2

これがHTMLではないことを願っていますが、これは疑問符のない山かっこで囲まれた単語と一致します。

/<\w+>/

文字以外の\w文字は使用できますが、疑問符は使用できません。

/<[^>?]+>/

疑問符は内部で許可されているが、山括弧に隣接している場合にのみ拒否される場合:

/<[^?].*?[^?]>/

<b>ただし、上記には、最小の長さの制約のために一致しない副作用があります。

于 2012-06-07T13:02:46.497 に答える
0

それは些細なことですが、あなたはそれに間違った方法でアプローチしています。不要なものと一致しないのではなく、必要なものと一致する必要があります。タグを照合するには、次のバリエーションを使用します。

<\w+[^>\?]*>

必要に応じて具体的にします。タグで許可されている文字のセットに含まれていない限り、\?問題はありません。また、これは属性を持つタグと一致することに注意してください。

于 2012-06-07T13:06:49.617 に答える