用于重组作者名字,姓氏,标题的正则表达式字符串

时间:2015-07-21 15:54:53

标签: regex

我想以

格式转换字符串
The European Union - A Very Short Introduction - Pinder, John

John Pinder - The European Union - A Very Short Introduction

我无法匹配" Pinder"和"约翰"以所需的方式重新格式化。

3 个答案:

答案 0 :(得分:1)

有很多方法可以解决这个问题,所有这些方法都需要在您的问题中未指定一些假设。这是一个解决方案......

^.+-\s+(.+),\s+(.+)$

regexper diagram enter image description here

它通过消耗尽可能多的字符(直到第一个捕获组,使用连字符和空格作为分隔符)来工作,然后它假设有一个逗号,后面跟着将名字和姓氏分开的空格,它假设是结束字符串。

根据您对数据一致性的了解,这可能适用于您,也可能不适合您,但我认为有一个解决方案不会试图限制名称中的字符,而是其余的格式。

答案 1 :(得分:1)

您可以使用:

^(.*?)(?:-\s+(\w+),\s+(\w+))$

Demo

如果你的作者有多个名字(例如,克劳塞维茨,卡尔和#39;),那么这项工作就不会有效。相反,也许:

^(.*)(?:-\s+([^,]+?),\s+(\w+))$

Demo 2

答案 2 :(得分:0)

使用此代码:

  $code = preg_match_all('/(?:.*?) - (?:.*?) -(.*?),(.*)/', $string,$matches);

这将为您提供一个数组,$matches[1]将为您提供姓氏(在本例中为“Pinder”),$matches[2]将为您提供名字(“John”)。如果要使用$lastname = implode('',$matches[1]);,则可以将其重新转换为字符串。