我想以
格式转换字符串The European Union - A Very Short Introduction - Pinder, John
到
John Pinder - The European Union - A Very Short Introduction
我无法匹配" Pinder"和"约翰"以所需的方式重新格式化。
答案 0 :(得分:1)
有很多方法可以解决这个问题,所有这些方法都需要在您的问题中未指定一些假设。这是一个解决方案......
^.+-\s+(.+),\s+(.+)$
它通过消耗尽可能多的字符(直到第一个捕获组,使用连字符和空格作为分隔符)来工作,然后它假设有一个逗号,后面跟着将名字和姓氏分开的空格,它假设是结束字符串。
根据您对数据一致性的了解,这可能适用于您,也可能不适合您,但我认为有一个解决方案不会试图限制名称中的字符,而是其余的格式。
答案 1 :(得分:1)
您可以使用:
^(.*?)(?:-\s+(\w+),\s+(\w+))$
如果你的作者有多个名字(例如,克劳塞维茨,卡尔和#39;),那么这项工作就不会有效。相反,也许:
^(.*)(?:-\s+([^,]+?),\s+(\w+))$
答案 2 :(得分:0)
使用此代码:
$code = preg_match_all('/(?:.*?) - (?:.*?) -(.*?),(.*)/', $string,$matches);
这将为您提供一个数组,$matches[1]
将为您提供姓氏(在本例中为“Pinder”),$matches[2]
将为您提供名字(“John”)。如果要使用$lastname = implode('',$matches[1]);
,则可以将其重新转换为字符串。