[英]Parsing name value pairs from long string using regular expressions
正則表達式是將我帶回現實的可靠途徑。 我想我從來沒有在沒有幫助的情況下制作過一個,所以這里又是一個尋求幫助的呼聲。 這是示例輸入:
{{Taxobox | 名稱= Impala | 狀態= LC | status_system = IUCN3.1 | status_ref = {{IUCN2008 | assessors = IUCN SSC羚羊專家組| year = 2008 | id = 550 | title = Aepyceros melampus | downloaded = 2009年1月18日}}數據庫條目中包含了為什么該物種最不值得關注的簡要說明| 趨勢=穩定| 圖片=塞倫蓋蒂Impala3.jpg | image_caption = [[塞倫蓋蒂]],[[坦桑尼亞]]中的年輕雄性黑斑羚| image2 = Female_impala.jpg | image2_caption = [[Mikumi國家公園],[[坦桑尼亞]]中的母黑斑羚| regnum = [[動物]] ia | phylum = [[Chordate | Chordata]] | classis = [[哺乳動物]] ia | ordo = [[甚至有蹄類有蹄類動物|木偶蟲]] | 家族= [[Bovid]] ae | subfamilia ='''Aepycerotinae''| | subfamilia_authority = [[[約翰·愛德華·格雷|灰色]],1872年| 屬='''''Aepyceros'''''| | genus_authority = [[Carl Jakob Sundevall | Sundevall]],1847年| 物種='''''A. melampus'''''| subdivision_ranks =亞種| 細分= *” [[[Aepyceros melampus petersi | A。 米 petersi]]''*''A. 米 melampus''| range_map = Leefgebied_impala.JPG | range_map_caption =范圍地圖| 二項式=“ Aepyceros melampus” | binomial_authority =([[[馬丁·利希滕斯坦|利希滕斯坦]],1812年)| range_map = Impala.png | range_map_caption = Impala的分布
紅色= A。 米 黃lamp
藍色=上午 彼得斯}}
對不起,我無法以更好的方式格式化它。 這是一個很長的字符串,其中沒有換行符。 它實質上是一組名稱-值對。 每對格式:
管道空間屬性名稱空間等於空間屬性值空間
除了下一對的管道,對沒有明顯的結束符。
我想做的是將其轉換為PHP中的關聯數組。 對於它的價值,這是我至少嘗試找到一些匹配項的嘗試:
$pattern = "/\|([^=|^.]*)=([^\|]*)|/s";
if (preg_match_all($pattern, $pagecontent, $matches)) {
var_dump($matches);
} else echo "no match!";
這樣就不必太在意它了。 我希望一些正則表達式大師可以在這里為我提供幫助。
在嘗試提取對之前,需要從{{
和}}
分隔符中分離出包含的字符串。 由於看起來像使用status_ref={{...}}
嵌套分組,因此在您的示例中這將失敗。 您將需要preg_replace_callback和一個(?R)
模式。
像這樣的正則表達式可能適用於配對本身:
"/(?<= ^ | \|) # start, of string, or after any |
\s*(\w+) # name
(?:\s*=\s*( # =
\{\{.*?\}\} # {{....}}
| \[\[.*?\]\] # [[...]]
| \(.*?\) # (...)
| [^|]+) )? # plain values
/sx"
它將為您提供以下關聯數組:
$array = array_combine($matches[1], $matches[2]);
當然,隨着孤獨的名字令牌沒有獲得相關的價值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.