1

次のようなhtmlコードがあります。

<td width="24%"><b>Something</b></td>
          <td width="1%"></td>
          <td width="46%" align="center">
           <p><b>
    needed
  value</b></p>
          </td>
          <td width="28%" align="center">
            &nbsp;</td>
        </tr>

Something抽出したい単語の後に最初のテキスト ノード (タグではなく、内部のテキスト) を抽出するための適切な正規表現パターンは何ですか?

     needed
  value

そしてそれ以上のものはありません。

PHPで機能する正規表現パターンがわかりません。

編集: 私はhtmlドキュメント全体を解析していませんが、その数行を解析しているので、HTMLパーサーを使用せずに正規表現を使用するだけです。

4

1 に答える 1

4

HTML を正規表現で解析する際の潜在的な問題を無視すると、次のパターンがサンプル コードと一致するはずです。

Something(?:(?:<[^>]+>)|\s)*([\w\s*]+)

これは に一致Somethingし、その後に任意の HTML タグ (または空白) のリストが続き、次のテキスト ブロック\w(空白を含む) に一致します。

これを PHP のpreg_match()メソッドで次のように使用できます。

if (preg_match('/Something(?:(?:<[^>]+>)|\s)*([\w\s*]+)/', $inputString, $match)) {
    $matchedValue = $match[1];
    // do whatever you need
}

正規表現の説明:

Something         # has to start with 'Something'
(?:               # non-matching group
    (?:           # non-matching group
        <[^>]+>   # any HTML tags, <...>
    )
    | \s          # OR whitespace
)*                # this group can match 0+ times
(
    [\w\s*]+      # any non-HTML words (with/without whitespace)
)
于 2012-10-04T17:33:32.963 に答える