ホームページ > バックエンド開発 > PHPチュートリアル > 誰がルール変更に協力できるでしょうか?

誰がルール変更に協力できるでしょうか?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-23 14:16:44
オリジナル
1047 人が閲覧しました

これは照合する内容です:

<dl>	<dt>2013</dt>	<dd>row1</dd>	<dd>row2</dd>	<dd>row3</dd></dl><dl>	<dt>2014</dt>	<dd>row1</dd>	<dd>row2</dd></dl>
ログイン後にコピー


dl と照合し、dl の下の dt とすべての dd を照合するには、

私はこれを書きました:

<dl>\s+<dt>(.*?)</dt>(\s+<dd>(.*?)</dd>\s+)*?</dl>
ログイン後にコピー


しかし、この照合の結果はあまり良くありません はい, dd は常に最後のもののみに一致します。この表現はどのように修正すればよいでしょうか?


ディスカッションへの返信 (解決策)

$s =<<< HTML<dl>    <dt>2013</dt>    <dd>row1</dd>    <dd>row2</dd>    <dd>row3</dd></dl><dl>    <dt>2014</dt>    <dd>row1</dd>    <dd>row2</dd></dl>HTML;preg_match_all('#<dl>.+</dl>#isU', $s, $r);print_r($r);
ログイン後にコピー
ログイン後にコピー
Array
(
[0] => Array
(
) [0] =>

2013

< dd> ; row1
/d t>

$s =<<< HTML<dl>    <dt>2013</dt>    <dd>row1</dd>    <dd>row2</dd>    <dd>row3</dd></dl><dl>    <dt>2014</dt>    <dd>row1</dd>    <dd>row2</dd></dl>HTML;preg_match_all('#<dl>.+</dl>#isU', $s, $r);print_r($r);
ログイン後にコピー
ログイン後にコピー
Array
(
[0] => 配列
(
row2
行3< dd>




)

)
モデレーターありがとうございます。ただし、dt と dd も一致させる必要があります。

dl を一度一致させ、dt と dd を再度一致させます。

变通一下(待匹配的项数不定,形式语言基本无法实现)

preg_match_all('#<(d[dt])>\s*([^<]+)</\\1>#is', $s, $r);print_r($r);
ログイン後にコピー
ログイン後にコピー
Array
(
[0] => Array
(
[0] =>
2013

[1] =>
row1

[2] =>
row2

[3] =>
row3

[4] =>
2014

[5] =>
row1

[6] =>
row2

)

[1] => Array
(
[0] => dt
[1] => dd
[2] => dd
[3] => dd
[4] => dt
[5] => dd
[6] => dd
)

[2] => Array
(
[0] => 2013
[1] => row1
[2] => row2
[3] => row3
[4] => 2014
[5] => row1
[6] => row2
)

)

这个你要一个正则式没办法实现的,要么就像xuzuning说的那样去做了,只是那样去作无法分清楚哪些是dt的,那些是dd的

因为相同分组会自动覆盖,要么想版主全匹配要么就是分开2次匹配。

变通一下(待匹配的项数不定,形式语言基本无法实现)

preg_match_all('#<(d[dt])>\s*([^<]+)</\\1>#is', $s, $r);print_r($r);
ログイン後にコピー
ログイン後にコピー
Array
(
[0] => Array
(
[0] =>
2013

[1] =>
row1

[2] =>
row2

[3] =>
row3

[4] =>
2014

[5] =>
row1

[6] =>
row2

)

[1] => Array
(
[0] => dt
[1] => dd
[2] => dd
[3] => dd
[4] => dt
[5] => dd
[6] => dd
)

[2] => Array
(
[0] => 2013
[1] => row1
[2] => row2
[3] => row3
[4] => 2014
[5] => row1
[6] => row2
)

)

谢谢版主啦。解决问题了,不过改用的是dom,

不过请版主解释一下你那个表达式呗

<(d[dt])>\s*([^<]+)</\\1>
ログイン後にコピー


这个不是太懂哦,谢谢

< (d[dt])>\s*([^<]+)
这就是向后引用

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート