gpt4 book ai didi

php - 否定正则表达式

转载 作者:行者123 更新时间:2023-12-05 05:42:14 25 4
gpt4 key购买 nike

我有一个正则表达式来缩小 Laravel 的 View 编译器生成的代码的结果。正则表达式只是在编译 View 时缩小 HTML。我无法将正则表达式设置为忽略以“:”和“@”开头的属性(例如 ... @click="hide(true)" :class="{collapsed: !open}"> ),因为 alpinejs 使用它们。

在 HTML 代码中:

<select
id="version-switcher"
:class="{test: true}"
aria-label="Localhost version"
class="appearance-none"
@change="window.location = $event.target.value"
>
<option value="https://localhost">Test</option>
<option selected value="https://localhost">Foo</option>
</select>

结果应该是:

<select id="version-switcher" :class="{test: true}" aria-label="Localhost version" class="appearance-none" @change="window.location = $event.target.value"><option value="https://localhost">Test</option><option selected value="https://localhost">Foo</option></select>

但是,输出是:

<select id="version-switcher":class="{test: true}" aria-label="Localhost version" class="appearance-none"@change="window.location = $event.target.value"><option value="https://localhost">Test</option><option selected value="https://localhost">Foo</option></select>

请注意,以 : 开头的属性和以 @ 开头的属性与上一个属性没有分开。正则表达式为:return preg_replace('/<!--(.*?)-->|\s\B/um', '', $html);

有人可以帮我解决这个问题吗?

最佳答案

你可以使用

preg_replace('~<!--[^-]*(?:-(?!->)[^-]*)*-->|\s+(?=\s[@:]?\w[\w-]*=|[<>])~u', '', $text)

参见 regex demo .

详细信息:

  • <!--[^-]*(?:-(?!->)[^-]*)*--> - <!--字符串,然后是 - 以外的零个或多个字符,然后零次或多次重复 -没有立即跟上 ->然后是零个或多个非连字符
  • | - 或者
  • \s+ - 一个或多个空格
  • (?=\s[@:]?\w[\w-]*=|[<>]) - 紧随其后的是
    • \s[@:]?\w[\w-]*= - 一个空格,一个可选的 @: , 一个单词 char, 零个或多个单词或 -字符,然后是 =字符
    • | - 或者
    • [<>] - 一个 <>字符。

关于php - 否定正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72095274/

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