我正在尝试测试一种方法,通过该方法我可以拆分包含有关学术出版物的多个记录的单个字符串。没有什么比将一个记录与下一个记录分开的有意义的分隔符更方便了。但我相信它可以实现,因为每个记录以一个日期后面跟着逗号和空格结束的模式(除非没有附加记录,在这种情况下它只是以日期结束),例如“YYYY-MM” -DD,“。
我已经开始了一个涉及字符串的简单测试,并确认正则表达式识别出我正在寻找的模式:
$date="2012-09-12, ";
if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]), $/",$date))
{
echo("yes");
}else{
echo("no");
然而,当我尝试使用真实数据和preg-split()的样本将其带到下一步时,拆分不起作用。我无法理解为什么从manual中的示例1中获取的这个简单测试无法导致字符串被拆分:
<?php
$pubs="L.J. Santodonato, Y. Zhang, M. Feygenson, C.M. Parish, M.C. Gao, R.J. Weber, J.C. Neuefeind, Z. Tang, P.K. Liaw~Deviation from high-entropy configurations in the atomic distributions of a multi-principal-element alloy.~NATURE COMMUNICATIONS~6~2015~~~~0~~0~~2015-11-21, S. Liu, M.C. Gao, P.K. Liaw, Y. Zhang~Microstructures and mechanical properties of AlxCrFeNiTi 0.25 alloys.~JOURNAL OF ALLOYS AND COMPOUNDS~619~2015~610~~~0~~0~~2015-11-21";
$pubsArray = preg_split("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]), $/", $pubs);
print_r($pubsArray);
?>
在示例字符串$ pubs中找到匹配相同模式的数据,但我得到的所有数据都是一个包含完整字符串的单个元素的数组。关于接下来要尝试什么,我已经没有想法,并且会对任何建议表示感谢。
答案 0 :(得分:0)
但我相信它可以实现,因为每个记录都以日期后跟逗号和空格结束(除非没有附加记录,在这种情况下它只是以日期结束),例如& #34; YYYY-MM-DD,&#34;。
当您尝试在日期出现时拆分字符串,您可以使用像/\d{4}(-\d{2}){2}/
这样的简单正则表达式。由于您没有验证日期,因此无需匹配所有月份和日期。
要在date
分割字符串,您应该使用以下正则表达式。
正则表达式: /(?<=\d{4}(-\d{2}){2}),\s*/
查找日期的出现,后跟可选的逗号和空格以及,[space]
上的拆分,因为我想您要保留发布日期。
Php代码
<?php
$pubs="L.J. Santodonato, Y. Zhang, M. Feygenson, C.M. Parish, M.C. Gao, R.J. Weber, J.C. Neuefeind, Z. Tang, P.K. Liaw~Deviation from high-entropy configurations in the atomic distributions of a multi-principal-element alloy.~NATURE COMMUNICATIONS~6~2015~~~~0~~0~~2015-11-21, S. Liu, M.C. Gao, P.K. Liaw, Y. Zhang~Microstructures and mechanical properties of AlxCrFeNiTi 0.25 alloys.~JOURNAL OF ALLOYS AND COMPOUNDS~619~2015~610~~~0~~0~~2015-11-21";
$pubsArray = preg_split("/(?<=\d{4}(-\d{2}){2}),\s*/", $pubs);
print_r($pubsArray);
?>
<强> Regex101 Demo 强>
<强> Ideone Demo 强>