我有这样的事情:
$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})[^"]*$)
但这只取代外部单引号'.我怎样才能用单引号替换内部双引号?
您可以分三步完成此操作,其中只有第一步需要正则表达式:
\n\n将每个外部引号(无论哪种 - 单引号或双引号)替换为未使用的字符(例如\xc2\xb5),一次一对:
查找: (\'|")(((?!\\1).)*).
\n回复: \xc2\xb5\\2\xc2\xb5
将每个剩余的双引号替换为单引号,因为根据步骤 1,它们是内部的:
\n\n查找: "
\n回复: \'
将每次出现的特殊字符(步骤 1 中的)替换为双引号
\n\n查找: \xc2\xb5
\n回复: "
显然,第一个(也是唯一一个)正则表达式发挥了主要作用:它捕获它找到的第一个引号(单引号或双引号),然后捕获字符,直到下一次出现相同类型的引号(使用\\1负数中的反向引用)条件并最终将第二次出现与.) 匹配。其工作的条件是所有外部引号都是成对出现的。
当您启动第一个替换时,请确保插入符号位于文本的最开头,以便它在任何引号对之外开始。
\n\n注意:PHP(您似乎使用它,但在其他几种语言中也是如此)允许使用反斜杠转义带有字符串文字的引号。如果您的输入中存在此类转义,任务会变得更加复杂,但这是可能的。
\n