-1

だから、私が持っているテキストは次のとおりです。

 <div>
    <span>one something 1 $2502</span><br>

    <span>
        one something 2
    </span><br>

    <span>one something 3 $25102
    </span><br>

    <span>
    one something 4 $2102</span><br>
</div>

これまでのところ、スパン間のすべてのテキストをキャッチするパターンを作成しようとしています。最初のスパンは問題なくキャッチできましたが、残りのスパンには問題があります

これが私がこれまでに得たものです:

\>(.*?\$\s*?(\d+\.?\d+).*?)\<

\>\r*?\n*?(.*?\$\s*?(\d+\.?\d+).*?)>\r*?\n*?\<他の人を捕まえるためのようなものを使用することを考えましたが、うまくいきません

4

4 に答える 4

4

マークアップ言語を一致させるために正規表現を使用するべきではありません。ネストされたタグが関与するとすぐに、物事は非常に急速に複雑になります。とはいえ、関係する 2 つの最も内側のタグの間にプレーン テキストがある例では、これを試してみることができます。

>[^<>]*\$\s*(\d+(?:\.\d*)?)[^<>]*<

>これは、2 つの...<区切り記号 (山括弧自体が含まれていない場合)の間にあるテキストに一致し、. の前に少なくとも 1 つの数字が含まれてい$ます。複数の場合は、最後のものをキャプチャします。

説明:

>       # Match >
[^<>]*  # Match anything besides < or >
\$      # Match $
\s*     # Match optional whitespace
(       # Match and capture...
 \d+    # a number
 (?:    # possibly followed by:
  \.\d* #  a dot and optional digits
 )?     # but make that part optional.
)       # End of capturing group
[^<>]*  # Match anything besides < or >
<       # Match <
于 2012-12-25T18:24:09.313 に答える
1
<?php 
$string = ' <div>
    <span>one something 1 $2502</span><br>

    <span>
        one something 2
    </span><br>

    <span>one something 3 $25102
    </span><br>

    <span>
    one something 4 $2102</span><br>
</div>';
preg_match_all('~<span>(.+)</span>~Usi', $string, $matches);
print_r($matches[1]);
?>

私にとってはうまくいきます。

于 2012-12-25T18:25:04.903 に答える
0

スパン内のすべてを選択するのは簡単です:<span>([^<]*)<\/span>

これがうまくいくかどうか教えてください。

価格のみが必要な場合:<span>[^$<]*(\$\d+)[^<]*<\/span>うまくいくはずです

于 2012-12-25T18:22:15.523 に答える
0

これには正規表現を使用しません。id を div に追加すると、DOM ツールを使用してスパン テキストを簡単に取得できます。

var div = document.getElementById('mydiv');

var text = [].slice.call( div.childNodes ).filter(function( node ){
  return node.nodeName == 'SPAN'
}).map(function( span ){ return span.innerText });

console.log( text ); //=> ["one something 1 $2502", "one something 2", "one something 3 $25102", "one something 4 $2102"]

編集: jQuery でできることは、パターンを見つけることです。たとえば、取得したいすべてのスパンのbr後にタグがあることがわかっている場合は、次のように見つけることができます。

var $spans = $('span').filter(function(){
  return $(this).next('br').length
});

var text = $spans.map(function(){
  return $(this).text();
});

パターンが一意でない場合は、正規表現を使用する必要があるかもしれません...

于 2012-12-25T18:36:03.533 に答える