2016-07-28 103 views
1

如果使用PCRE未包含單個qoutes,我想用雙引號替換雙引號。一些實例中,意思是輸入=>輸出替換不包含單引號的雙引號

"foo" => 'foo' 
'foo' => 'foo' 
abc "foo" => abc 'foo' 
foo "bar", "baz" => foo 'bar', 'baz' 
abc 'foo "bar" baz' => abc 'foo "bar" baz' 

我試圖^([^'"]*)"([^'"]*)"隨修飾m multi-line和「克global`。只要每行不超過一個「xyz」塊(第4行中失敗),就可以工作。

編輯:我忘了提,我目前的替代是$1'$2'

+2

試試[''[^'] *'(* SKIP)(* F)|「'](https://regex101.com/r/rR1mA2/1) –

+0

@WiktorStribiżew:太好了,非常感謝這很有效果 – Andy

+0

該解決方案僅適用於輸入字符串沒有轉義序列的情況。是否可以使用單引號進行轉義? –

回答

3

下面該解決方案將只在情況下輸入字符串的工作有沒有轉義序列

/'[^']*'(*SKIP)(*F)|"/ 

regex demo

  • '[^']*' - 匹配單引號,0+字符而不是單引號e和一個單引號再次
  • (*SKIP)(*F) - 放棄了比賽,從目前的指數繼續PCRE動詞序列(你可以在How do (*SKIP) or (*F) work on regex? SO post閱讀更多的是)
  • | - 或...
  • " - 一個雙引號。

如果有轉義序列,則需要編寫解析器。