簡體   English   中英

如何在php中提取字符串的一部分

[英]how to extract a portion of a string in php

我正在使用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]=qwe in between 12345
$match[1]=in between

但我使用相同的邏輯從以下字符串中提取。

<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是上面的字符串..

$ match不會返回任何內容....出於某種原因......我該怎么做? 提前致謝

如果要提取文本,可能需要使用preg_match 以下可能有效:

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

無論在parantheses中匹配的是什么,都可以在$matches數組中找到。 在這種情況下, <P>標簽后跟一個<FONT>標簽和</id> ,包括后者。

以上正則表達式未經測試,但可能會讓您大致了解如何執行此操作。 如果您的需求有點不同,請調整:)

即使不知道為什么你會在不完整的XML片段上匹配正則表達式(從<![CDATA[並在結束XML標記</id>之前結束</id> ,你的正則表達式確實存在三個明顯的問題:

  1. 正如Amri所說:你必須轉義結束XML標記中的/字符,因為你使用/作為模式分隔符。 順便說一下,你不必逃避>字符。 這給你: '/r1text1(.*)<\\/id>/' '#r1text1(.*)</id>#' '/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''/r1(?:\\s*)text(?:\\s*)1(.*)<\\/id>/s''/r1(?:\\s*)text(?:\\s*)1(.*)<\\/id>/s' )1(。*)/ '/r1(?:\\s*)text(?:\\s*)1(.*)<\\/id>/s'

您可能需要解析字符串/文件並提取FONT標記之間的值。 然后將值插入id標記

嘗試谷歌搜索PHP解析。

試試這個

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

您使用/作為模式分隔符,但您的內容具有/ in。 您可以使用\\作為轉義字符。

在示例中,您有“r1 text 1”,但您的正則表達式具有“r1text1”。 正則表達式不匹配,因為您嘗試將其匹配的字符串中有空格。 您應該在正則表達式中包含空格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM