【发布时间】:2017-11-16 16:43:04
【问题描述】:
有一个名称和首字母的列表,它们用逗号分隔并存储在一个名为$author的变量中
Shevchuk T.I.、Piskun R.P.、Vasenko T.B.
需要将首字母和姓氏分别分隔成变量。
名称示例:
贝莱美 N.I. / 你。 Belemets / N. I. Belemets / Belemets N. I. / Belemets N. / N. Belemets / Nu.贝莱美 / 贝莱美 Nu.
现在我尝试这样做:
$str_arr1= explode(", ", $author);
$initials= preg_split('([A-Z]\.[A-Z]\.|[A-Z]\.\s+[A-Z]\.|[A-Z][a-z]\.)', $str_arr1);
$surnames= preg_split('\w{3,15}', $str_arr1);
print_r ($str_arr1) 示例:
Array
(
[0] => Gunas I. V.
[1] => Babych L. V.
[2] => Cherkasov E. V.
)
但是$initials 和$surnames 不输出任何东西。可能是什么问题呢? CMS MODX。
提前致谢!
UPD:
现在代码如下所示:
$str_arr= explode(", ", $author);
foreach($str_arr as $value){
$preinitial= preg_split('/([A-Z]\.[A-Z]\.|[A-Z]\.\s+[A-Z]\.|[A-Z][a-z]\.\s+[A-Z]\.|[A-Z][a-z]\.)/', $value, -1, PREG_SPLIT_NO_EMPTY);
$presurname= preg_split('/\w{3,15}/', $value, -1, PREG_SPLIT_NO_EMPTY);
$initial = implode("", $preinitial);
$surname = implode("", $presurname);
echo '<given_name>'.$surname.'</given_name>';
echo '<surname>'.$initial.'</surname>';
echo "\r\n";
}
【问题讨论】:
-
$str_arr1分配中有一个尾随空格。您的逗号分隔列表是否使用", "或"," -
没有错,我就是这样把逗号后面多余的空格去掉的。
-
预期输出是什么?
-
预期:$surnames = Gunas,$initials = I. V.
标签: php regex preg-split