0
<OPTION value=a.a.>Afaceri</OPTION>
<OPTION value=a.b.>Mass Media</OPTION>
<OPTION value=a.c.>Publicitate</OPTION>
<OPTION value=b.a.>Agricultura</OPTION>

この HTML コードから "Afaceri,Mass Media,Publicicate,Agricultura" を php 正規表現で抽出したいのですが、どうすればよいですか?

4

4 に答える 4

2

html と正規表現は少し滑りやすい場合があります。htmlのフラグメントが上記のようにフォーマットされており、各オプションの後に改行が使用できると仮定した場合の代替ソリューションstrip_tags()

<?php
// your html fragment
$html = "<OPTION value=a.a.>Afaceri</OPTION>
<OPTION value=a.b.>Mass Media</OPTION>
<OPTION value=a.c.>Publicitate</OPTION>
<OPTION value=b.a.>Agricultura</OPTION>";

// explode by newline
$opts = explode(PHP_EOL, $html);

// use strip_tags on each element
$names = array_map(function($opt) {
    return strip_tags($opt);
}, $opts);

// done
var_dump($names);

生成する必要があります:

array (size=4)
  0 => string 'Afaceri' (length=7)
  1 => string 'Mass Media' (length=10)
  2 => string 'Publicitate' (length=11)
  3 => string 'Agricultura' (length=11)

お役に立てれば。

于 2013-06-13T08:49:59.100 に答える
1

私たちはよく (ほぼ常に) DOM パーサーを使用してマニュアルへのリンクを提供することを提案していますが、あまり例を見たことがありません。

regexhtml を解析できますが、適切なツールではありません。不正な形式の html で頭痛がするのを避けるために、いくつかの dom パーサーを使用する必要があります。PHP は、うまく動作するAPIを提供します。

たとえば、DOMDocument目的の出力を得るには、次のようにする必要があります。

<?php
$html = <<<HTML
<OPTION value=a.a.>Afaceri</OPTION>
<OPTION value=a.b.>Mass Media</OPTION>
<OPTION value=a.c.>Publicitate</OPTION>
<OPTION value=b.a.>Agricultura</OPTION>
HTML;

$dom = new DOMDocument();
$dom->loadHTML($html);
$nodes = $dom->getElementsByTagName('option');

$result = array();
foreach ($nodes as $node) {
    $result[] = $node->nodeValue;
}

var_dump($result);

デモ

于 2013-06-13T08:52:35.257 に答える
0

次のようなもので試すことができます:/<OPTION [^>]+>([^<]+)<\/OPTION>/

つまり、テキスト "<OPTION" の後に ">" 以外の 1 つ以上の文字が続き、その ">" と一致し、"<" 以外の 1 つ以上の文字と "</OPTION>" が続くテキストに一致します。 .

ところで、エスケープを避けたい場合は、正規表現をよりクリーンにするために、次のように別の区切り文字を使用できます。#<OPTION [^>]+>([^<]+)</OPTION>#

于 2013-06-13T08:41:12.550 に答える