gpt4 book ai didi

php - 正则表达式匹配双引号字符串,php标签内没有变量

转载 作者:可可西里 更新时间:2023-11-01 13:43:00 30 4
gpt4 key购买 nike

基本上我需要一个正则表达式来匹配 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 中使用正则表达式替换来清理 PHP 源代码。

最佳答案

tl;dr

这实在是太复杂了,无法用正则表达式来完成。尤其不是简单的正则表达式。嵌套的正则表达式可能会让你更幸运,但你确实需要 lex/parse 来找到你的字符串,然后你可以用正则表达式对它们进行操作。

说明

可能可以做到这一点。您可能甚至可以很好地做到这一点,甚至可以完美。但这并不容易。这将非常非常困难。

考虑一下:

Welcome to my php file. We're not "in" yet.

<?php
/* Ok. now we're "in" php. */

echo "this is \"stringa\"";
$string = 'this is \"stringb\"';
echo "$string";
echo "\$string";

echo "this is still ?> php.";

/* This is also still ?> php. */

?> We're back <?="out"?> of php. <?php

// Here we are again, "in" php.

echo <<<STRING
How do "you" want to \""deal"\" with this STRING;
STRING;

echo <<<'STRING'
Apparently this is \\"Nowdoc\\". I've never used it.
STRING;

echo "And what about \\" . "this? Was that a tricky '\"' to catch?";

// etc...

忘记在双引号字符串中匹配变量名。你能匹配这个例子中的所有字符串吗?这对我来说就像一场噩梦。SO的语法高亮肯定不知道拿它干什么。

您是否考虑过变量可能出现在heredoc中?字符串也是?

我不想考虑正则表达式来检查是否:

  1. 内部<?php<?=代码
  2. 不在评论中
  3. 在引述中
  4. 什么类型的报价单?
  5. 它是那种类型的引用吗?
  6. 前面有\吗(逃脱)?
  7. \逃脱了??
  8. 等...

总结

您或许可以为此编写一个正则表达式。您可能可以通过一些反向引用和大量的时间和精力来管理。这会很困难,您可能会浪费很多时间,如果您需要修复,您将不会理解您编写的正则表达式。

另见

This answer .这是值得的。

关于php - 正则表达式匹配双引号字符串,php标签内没有变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17589150/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com