正则表达式是让我回到地球的可靠方法。我不认为我曾经没有帮助过,所以这是另一个求助的呼声。这是示例输入:
{{Taxobox | name = Impala | status = LC | status_system = IUCN3.1 | status_ref = {{IUCN2008 |评估员= IUCN SSC羚羊 专家组|年= 2008 | id = 550 | title = Aepyceros melampus |已下载= 2009年1月18日}}数据库条目包括简要说明 为什么这个物种最不受关注的理由趋势= 稳定| image = Serengeti Impala3.jpg | image_caption =年轻男性 [[塞伦盖蒂]],[[坦桑尼亚]] |中的黑斑羚image2 = Female_impala.jpg | image2_caption = [[米库米国家公园]]中的雌性黑斑羚], [[坦桑尼亚]] | regnum = [[动物]] ia |门= [[Chordate | Chordata]] | classis = [[哺乳动物]] ia | ordo = [[偶蹄动物有蹄类动物|偶蹄动物]] | familia = [[Bovid]] ae | subfamilia ='''Aepycerotinae'''| subfamilia_authority = [[John Edward Gray | Gray]],1872 |属= '''''Aepyceros'''''| genus_authority = [[Carl Jakob Sundevall | Sundevall],1847 | species ='''''A。 melampus'''''| subdivision_ranks =亚种| subdivision = *''[[Aepyceros melampus petersi | A.米petersi]] '' * ''一个。米melampus''| range_map = Leefgebied_impala.JPG | range_map_caption =范围映射|二项式=''Aepyceros melampus''| binomial_authority =([[Martin Lichtenstein | Lichtenstein]],1812)| range_map = Impala.png | range_map_caption =分布 Impala
红= A。米melampus
蓝色= A. m。 petersi}}
抱歉,我无法以更好的方式进行格式化。它是一个很长的字符串,没有新行。它本质上是一组名称 - 值对。每对格式:
管道空间属性名称空间等于空间属性值空间
除了下一对的管道之外,一对没有明显的结束字符。
我想做的是将其转换为PHP中的关联数组。对于它的价值,这是我尝试至少尝试找到一些匹配的尝试:
$pattern = "/\|([^=|^.]*)=([^\|]*)|/s";
if (preg_match_all($pattern, $pagecontent, $matches)) {
var_dump($matches);
} else echo "no match!";
这样做不要过分关注它。我希望有一些正则表达的大师来帮助我。
答案 0 :(得分:1)
在尝试提取对之前,您需要将包含的字符串与{{
和}}
分隔符隔离开来。由于看起来像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]);
孤独的名字令牌当然没有得到相关价值。