1

正規表現のまったく新しい。これが以前に回答されていないことを願っています。あったらごめんなさい。

私の問題は、文字列内から文字列から名前を取得しようとしています。これに最適なオプションについて頭を悩ませているかどうかはわかりません。これは文字列ブロック全体からの小さな抜粋です

 <div class="txt-block" itemprop="contractors" itemscope
 itemtype="home"> 
                             <h4 class="inline">Employs:</h4> <a href="/.../" itemprop='url'><span class="itemprop"
 itemprop="name">Carp 1</span></a>,  <a href="/.../"
 itemprop='url'><span class="itemprop" itemprop="name">Carp
 2</span></a>,  <a href="/.../" itemprop='url'><span class="itemprop"
 itemprop="name">Carp 3</span></a>                          <span
 class="tots">|</span>
                           <span class="see-more inline"> <a href="/.../" itemprop='url'>See full options</a>                      
 </span>
                          </div>

「鯉1」「鯉2」「鯉3」を抽出したいと思います。文字列の長さは、抽出したいアイテムの数と同様に異なります。

たぶん、これを行うもっと簡単な方法があります。すべての助けに感謝します。

4

4 に答える 4

0

これは正規表現に関する質問ではありません。HTML DOM と XPath を介した HTML 解析が必要になります。

ref については、次のリンクを参照してください。

http://www.w3schools.com/xpath/xpath_syntax.asp

http://www.php.net/manual/en/domxpath.query.php

于 2013-04-25T08:06:42.513 に答える
0

更新:これは、HTML の解析に関する質問であることを示すために質問がフォーマットされる前に投稿されました。

この正規表現は、次のようなプレーン テキスト文字列を解析していることを前提としています。

Employs: carp1, carp2, carp3 | blah blah...

一般に、正規表現を使用して HTML を解析するべきではありません。ただし、最初に別の方法を使用してすべての HTML タグを削除する場合は、結果のプレーン テキストに対してこのアプローチを使用できます。

一般に、これは次の 2 段階のプロセスで行うのが最適です。

まず、必要な文字列の部分を取得します。

my $carps;
if ($string =~ /Employs:\s*([^|]+)/)
{
    $carps = $1;
}

次に、一致した部分から各アイテムを取得します。必要に応じて正規表現を使用できますが、この場合は単純な分割で十分であるように見えます。

my @carps = split /,\s*/, $carps;

(例として Perl を使用していますが、このアプローチはどの言語でも機能するはずです)。

于 2013-04-25T08:06:46.647 に答える