正则表达式PHP的preg_replace交换比赛和匹配的多个实例

问题描述:

我正在寻找一个在preg_replace函数为PHP以下情况下正则表达式:正则表达式PHP的preg_replace交换比赛和匹配的多个实例

  • 例如串"Bjerre- Jonas, Jorgensen- Silas, Wohlert- Johan, Madsen- Bo"
  • 所需的字符串"Jonas Bjerre, Silas Jorgensen, Johan Wohlert, Bo Madsen"
  • 字符串是csv字段和双引号是外壳并且是字符串的一部分
  • 可能存在任何次数的事件,包括无 - 示例显然有4
  • 有一个一致的-以匹配分离比赛被换

我在PHP和正则表达式一个小白,并已被玩弄于阴凉test arena的东西像preg_replace("/^\"(?<=-)/", ""$2 $1$3"", $input_lines);与可怕的结果。感谢帮助!

([^," -]*)\s*-\s*([^," ]*) 

试试看。

http://regex101.com/r/hI0qP0/20

$re = "/([^\", -]*)\\s*-\\s*([^,\" ]*)/m"; 
$str = "\"Bjerre- Jonas, Jorgensen- Silas, Wohlert- Johan, Madsen- Bo\""; 
$subst = "$2 $1"; 

$result = preg_replace($re, $subst, $str); 
+0

谢谢,VKS!它抱怨,如果我使用每个演示'g'修饰符,但似乎没有任何修饰符工作正常。 – BartmanEH

+0

@BartmanEH'g对于preg_replace()是隐含的,您不需要包含它。' – vks

+0

我在短划线之后添加了一个空格,仅匹配' - '的唯一大小写,如下所示:'/([^“ - ] *)\ s * - \ s *([^,“] *)/'现在它适用于带连字符姓的以下字符串:'”Reisle- Martin,Malinowski-Jay,Brant-Briscall-Aiden,Vaughan - Elliot,Dolmont-Mark“'回来'”Martin Reisle,Jay Malinowski,Aiden Brant-Briscall,Elliot Vaughan,Mark Dolmont“' – BartmanEH