2015-06-14 40 views
0

我正在尋找一個在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);與可怕的結果。感謝幫助!

回答

1
([^," -]*)\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