簡體   English   中英

正則表達式語法在PHP中提取格式的所有實例

[英]Regular expression syntax In PHP to extract all instances of a format

我正在嘗試從字符串中提取特定格式的所有實例:

我想知道我的新Sony [PT#123456ABC; 索尼]具有此功能,但我的朋友說新的東芝[PT#AD-3232hjk; 東芝]具有此功能。

我想提取:

[PT#123456ABC; 索尼]

[PT#AD-3232hjk; 東芝]

如您所見,處於一致位置的唯一項目是:

  • [PT#
  • ;
  • ]

我試圖使用各種類型的strpos(),但是由於部件號和制造商名稱的長度和格式的不同,我無法可靠地從更大的字符串中提取那些實例。 我一直在嘗試各種使用正則表達式解決此問題的方法,但是我對它們的了解非常有限。 將這些表達式提取並放入變量后,我將需要從表達式中分離零件號和制造商名稱。 使用正則表達式也可能更容易實現。

任何幫助表示贊賞。 謝謝

$matches = array();
preg_match_all( "/\[PT#([^\];]+);([^\]]+)\]/", $input, $matches,  PREG_SET_ORDER);

foreach ($matches as $match) {
  echo "id=", trim($match[1]), " brand=", trim($match[2]), "\n";
}

我認為這可以做到

preg_match_all( "/(\[PT#\s+.*?;\s+.*?\])/", $input, $matches );

print_r( $matches );

或者,如果您只想捕獲唯一信息

preg_match_all( "/\[PT#\s+(.*?);\s+(.*?)\]/", $input, $matches );

我認為您將從包含許多這些條目的文本文件中讀取。 您可以做的是:

preg_match_all("/\[PT#(.*?);[.*]?(.*?)\]/i", $text, $result);

它將所有匹配項放入數組$ result中,您可以這樣訪問它們:

echo $result[1][0]; //echos first occurrence's serial

$ result按主列排序,匹配的第一個條目是完整的匹配字符串

echo $result[0][0]; // would print [PT# 123456ABC; Sony]
echo $result[1][0]; // would print 123456ABC
echo $result[2][0]; // would print Sony

希望能有所幫助

編輯:修復了正則表達式,現在應該可以使用(仍然未經測試)

暫無
暫無

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

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