我需要在定义的字符串之后为整行设置单引号。
cite: Lorem ipsum dolor
应该得到
cite: 'Lorem ipsum dolor'
因此,我正在使用这个正则表达式:
$line = preg_replace('/cite:'s*'K(.*)?$/s', '''$1''', $line);
但我需要一些额外的东西:如果该行已经有双引号 - 这意味着在开头和结尾(可选地加上一些空格) - 它应该替换为单引号。如果双引号位于中间的某个位置,则它们应该不会发生任何事情。
如果行的开头或结尾已经有单引号,则不应对该行执行任何操作。
行中间的单引号需要转义。由于它在 YAML 文件中使用,字符串中间的单引号必须通过加倍单引号来转义('
应该得到''
)。
例:
cite: "Lorem ipsum dolor"
cite: Lorem ipsum "dolor"
cite: Lorem "ipsum" dolor
cite: "Lorem "ipsum" dolor"
cite: 'Lorem ipsum dolor'
cite: Lorem 'ipsum' dolor
这应该导致以下结果:
cite: 'Lorem ipsum dolor'
cite: 'Lorem ipsum "dolor"'
cite: 'Lorem "ipsum" dolor'
cite: 'Lorem "ipsum" dolor'
cite: 'Lorem ipsum dolor'
cite: 'Lorem ''ipsum'' dolor'
您可以使用:
$line = preg_replace_callback('/cite:'s*'K([''"]?)(.+?)'1'h*$/m', function($m) {
return "'" . str_replace("'", "''", $m[2]) . "'"; }, $line);
正则表达式演示