【发布时间】:2013-07-11 08:56:30
【问题描述】:
基本上,我需要一个正则表达式来匹配 PHP 标记内的所有双引号字符串,而其中没有变量。
这是我目前所拥有的:
"([^\$\n\r]*?)"(?![\w ]*')
并替换为:
'$1'
不过,这也会匹配 PHP 标记之外的内容,例如 HTML 属性。
示例案例:
<a href="somelink" attribute="value">Here's my "dog's website"</a>
<?php
$somevar = "someval";
$somevar2 = "someval's got a quote inside";
?>
<?php
$somevar3 = "someval with a $var inside";
$somevar4 = "someval " . $var . 'with concatenated' . $variables . "inside";
$somevar5 = "this php tag doesn't close, as it's the end of the file...";
它应该匹配并替换所有应该将" 替换为' 的位置,这意味着最好不要单独使用html 属性。
替换后的示例输出:
<a href="somelink" attribute="value">Here's my "dog's website"</a>
<?php
$somevar = 'someval';
$somevar2 = 'someval\'s got a quote inside';
?>
<?php
$somevar3 = "someval with a $var inside";
$somevar4 = 'someval ' . $var . 'with concatenated' . $variables . 'inside';
$somevar5 = 'this php tag doesn\'t close, as it\'s the end of the file...';
能够匹配内部脚本标签也很棒......但这可能会推动它进行一次正则表达式替换。
我需要正则表达式方法,而不是 PHP 方法。假设我在文本编辑器或 JavaScript 中使用 regex-replace 来清理 PHP 源代码。
【问题讨论】:
-
使用
preg_replace_callback()匹配php标签,并在回调中使用你的正则表达式。 -
@HamZa 如果 php 中有这样的东西怎么办:
$a = '<?php echo 'booooo!; ?>';? -
@hek2mgl 你能告诉我在一般情况下发生这种情况的可能性吗?
-
@HamZa 检查我的答案。
tokenizer做得很好。我认为该功能是解决问题的合理努力,因为简单的正则表达式解决方案的任何问题都会导致源文件损坏。 -
@DJDavid98 指出答案“不正确”本身就是不正确的。它以正确和安全的方式完成工作。也看看编辑历史,难怪这个帖子有点乱了。
标签: php regex html-parsing