php - 正则表达式在匹配字符串的开头和结尾处用单引号替换双引号

标签 php regex

我需要在定义的字符串之后为整行设置单引号。

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);

RegEx Demo

关于php - 正则表达式在匹配字符串的开头和结尾处用单引号替换双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29018148/

相关文章:

php - DOMDocument() 的替代方法

如果不是最后一个单词,则正则表达式不匹配该单词

mysql查询和正则表达式问题

php - javascript 意外的 token COOKIE

java - 使用正则表达式计算用户输入的标点符号并打印出来

python - 在新行、制表符和一些空格上拆分字符串

Python re.sub() : Replacing a char between two different categories

php - 显示表格并提供删除选项

php - 如何在android TextView 上查看php脚本的结果

php - undefined variable 。拉维