【问题标题】:regex that can distinguish PHP tags contained in HTML tags可以区分HTML标签中包含的PHP标签的正则表达式
【发布时间】:2023-04-03 02:58:01
【问题描述】:

我需要一个 javascript 正则表达式,可以区分 HTML 标记中的 PHP 标记和 HTML 标记之外的 PHP 标记。

例如

<input type="text" <? print '1'; ?> value="<? print '2'; ?>">

<? print '3';?>

所以我需要一个正则表达式来退出:

<? print '1'; ?> and <? print '2'; ?>

还有一个要退出的正则表达式:

<? print '3';?>

目前我有这个正则表达式,它可以提取所有 PHP 标记,无论它们在哪里:

/\n?<\?(php)?(\s|[^\s])*?\?>\n?/ig

【问题讨论】:

标签: php javascript regex


【解决方案1】:

A)。在正常的浏览器上下文中,Javascript 根本无法“看到” PHP。您希望从哪里读取文档?

B)。正则表达式不是解析不是常规语法的 HTML 的合适工具。您必须使用 XML/HTML 解析器。

【讨论】:

  • b) 我知道这样做很脏 - 但它也很快,不需要完美。
  • @Adam Jimenez - sigh 这很有帮助,因为我告诉你你的基本假设是不正确的,遵循它们将不可避免地导致问题。无论您是否想继续敲击,这真的是您的决定,但如果您不想听,请不要提问。
  • 我听了,但没有帮助。您不能在 PHP 文档上使用常规 XML/HTML 解析器,因为它无效。不管怎样,别担心,我想通了。
  • 不,你只是认为你有,但事实如此。
【解决方案2】:

这是一件非常复杂的事情,我非常怀疑它是否可以通过正则表达式来解决。这在一定程度上取决于您要提取的 PHP 的复杂程度,但有很多情况需要考虑:

<?=max($a, $b);?>
<? echo max($a, $b); ?>
<?php echo ($a > $b) ? 'yes' : 'no'; ?>
<div><p><?php echo '</p>'; ?></div>

为什么你需要用 JavaScript 和正则表达式来做这件事?

【讨论】:

  • @halfdan 在 PHP.next 中可能是这样(尽管php.net/manual/en/ini.core.php 没有提到),但这并不意味着它们不会出现。我提到它们是为了满足所有情况。
  • &lt;?php echo '?&gt;'; ?&gt; 呢?正则表达式不是这项工作的工具。
  • @halfdan PHP 短标签默认不会启用 - 并不意味着它们已被弃用。
  • 匹配那些php标签应该没问题,因为它们都以 ?>。我知道正则表达式并不完美,所以会有一些奇怪的情况从网上溜走——我可以忍受。我只需要它来处理我的示例。
  • 我这样做的原因是为了修复这个错误:trac.xinha.org/ticket/1391
【解决方案3】:

不要对 HTML 或 XML 标记使用正则表达式。而是使用来自XmlDocumentXmlElementXmlAttribute 的解析方法。

【讨论】:

  • 我不确定它是否能正确解析整个地方的 php 标签。
猜你喜欢
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 2014-08-23
  • 2015-04-18
  • 1970-01-01
相关资源
最近更新 更多