将外部单引号(')替换为double("),将内部double(")替换为单个qoutes(')

new*_*rus 5 regex notepad++

我有这样的事情:

$class = 'class="cl"' . " style=" . '"color:black,' . "background:red;" . '"';
Run Code Online (Sandbox Code Playgroud)

正则表达式是否有任何简单的方法将此代码格式化为" ' ' "样式?我是说这个:

$class = "class='cl'" . " style=" . "'color:black," . "background:red;" . "'";
Run Code Online (Sandbox Code Playgroud)

我试过这个正则表达式:

'(?!(([^"]"){2})[^"]*$)

但这只取代外部单引号'.我怎样才能用单引号替换内部双引号?

tri*_*cot 3

您可以分三步完成此操作,其中只有第一步需要正则表达式:

\n\n
    \n
  1. 将每个外部引号(无论哪种 - 单引号或双引号)替换为未使用的字符(例如\xc2\xb5),一次一对:

    \n\n

    查找: (\'|")(((?!\\1).)*).
    \n回复: \xc2\xb5\\2\xc2\xb5

  2. \n
  3. 将每个剩余的双引号替换为单引号,因为根据步骤 1,它们是内部的:

    \n\n

    查找: "
    \n回复: \'

  4. \n
  5. 将每次出现的特殊字符(步骤 1 中的)替换为双引号

    \n\n

    查找: \xc2\xb5
    \n回复: "

  6. \n
\n\n

显然,第一个(也是唯一一个)正则表达式发挥了主要作用:它捕获它找到的第一个引号(单引号或双引号),然后捕获字符,直到下一次出现相同类型的引号(使用\\1负数中的反向引用)条件并最终将第二次出现与.) 匹配。其工作的条件是所有外部引号都是成对出现的。

\n\n

当您启动第一个替换时,请确保插入符号位于文本的最开头,以便它在任何引号对之外开始。

\n\n

注意:PHP(您似乎使用它,但在其他几种语言中也是如此)允许使用反斜杠转义带有字符串文字的引号。如果您的输入中存在此类转义,任务会变得更加复杂,但这是可能的。

\n