3

文字列の置換に preg_replace() を使用しています。

$str = "<aa>Let's find the stuff qwe in between <id>12345</id> these two previous brackets</h>";

$do = preg_match("/qwe(.*)12345/", $str, $matches);

これはうまく機能しており、次の結果が得られます

$match[0]=12345 の間の qwe
$match[1]=中間

しかし、同じロジックを使用して次の文字列から抽出しています。

<text>
  <src><![CDATA[<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Arial" SIZE="36" COLOR="#999999" LETTERSPACING="0" KERNING="0">r1 text 1  </FONT></P></TEXTFORMAT>]]></src>
  <width>45%</width>
  <height>12%</height>
  <left>30.416666666666668%</left>
  <top>3.0416666666666665%</top>
  <begin>2s</begin>
  <dur>10s</dur>
  <transIn>fadeIn</transIn>
  <transOut>fadeOut</transOut>
  <id>E2159292994B083ACA7ABC7799BBEF3F7198FFA2</id>
</text>

から文字列を抽出したい

r1text1

</id>

私が現在持っている正規表現は次のとおりです。

preg_match('/r1text1(.*)</id\>/', $metadata], $matches); 

$metadata は上記の文字列です。

$matches は何も返しません....何らかの理由で...どうすればいいですか? 前もって感謝します

4

5 に答える 5

2

テキストを抽出したい場合は、おそらくpreg_match. 以下はうまくいくかもしれません:

preg_match('#\<P[^\>]*\>\<FONT[^\>]*\>(.*\</id\>)#', $string, $matches)

$matches括弧内で一致するものはすべて、配列内で後で見つけることができます。この場合、タグの<P>後に続く<FONT>タグとの間のすべて</id>(後者を含む)。

上記の正規表現はテストされていませんが、それを行う方法の一般的なアイデアを提供する可能性があります。ニーズが少し異なる場合は適応してください:)

于 2009-04-10T07:12:51.370 に答える
1

不完全なXMLフラグメントで正規表現を照合する理由がわからない場合でも(で始まり<![CDATA[、終了XMLタグの直前で終わる</id>)、正規表現には3つの明らかな問題があります。

  1. Amriが言ったように、パターン区切り文字として/使用するため、終了XMLタグの文字をエスケープする必要があります。/ちなみに、>キャラクターから逃げる必要はありません。'/r1text1(.*)<\/id>/'または、パターン区切り文字を次のように変更できます(#たとえば'#r1text1(.*)</id>#'、最初のパターンを使用して式をさらに発展させます)。

  2. Rich Adamsがすでに述べたように、サンプルデータのテキストは " " r1_text_1_スペース文字)ですが、と一致し'/r1text1(.*)<\/id>/'ます。正規表現にスペースを含めるか、次のような不確実な数のスペースを許可する必要があります'/r1(?:\s*)text(?:\s*)1(.*)<\/id>/'(これ?:は非キャプチャサブパターンの構文です)

  3. 正規表現の.(ドット)は、デフォルトでは改行と一致しません。(ドット)を改行と一致sさせるには、(PCRE_DOTALL)パターン修飾子を追加する必要があります。.'/r1(?:\s*)text(?:\s*)1(.*)<\/id>/s'

于 2009-04-10T09:25:01.723 に答える
0

これを試して

preg_match('/r1text1(.*)<\/id\>/', $metadata], $matches);

パターン区切り文字として / を使用していますが、コンテンツには / が含まれています。\ をエスケープ文字として使用できます。

于 2009-04-10T08:18:56.110 に答える
0

おそらく、文字列/ファイルを解析し、FONT タグの間の値を抽出する必要があります。次に、値を id タグに挿入します

PHPの解析のためにグーグルを試してください。

于 2009-04-10T06:48:37.357 に答える
0

サンプルには「r1 text 1」がありますが、正規表現には「r1text1」があります。照合しようとしている文字列にスペースがあるため、正規表現は一致しません。正規表現にスペースを含める必要があります。

于 2009-04-10T08:58:30.650 に答える