我有一个正则表达式来缩小Laravel视图编译器生成的代码的结果.在编译视图时,正则表达式只不过是缩小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.

Details:

  • <!--[^-]*(?:-(?!->)[^-]*)*-->-<!--字符串,然后是除-以外的零个或多个字符,然后是不紧跟->的零个或多个-重复,然后是零个或多个非连字符
  • |-或
  • \s+-一个或多个空格
  • (?=\s[@:]?\w[\w-]*=|[<>]) - that are immediately followed with
    • \s[@:]?\w[\w-]*=-一个空格,可选的@:,一个单词字符,零个或多个单词或-个字符,然后是=个字符
    • |-或
    • [<>]-<>个字符.

Php相关问答推荐

composer如何解析包名?

Laravel 10 -扩展现有的artisan命令?

Laravel Livewire如何在数组值上使用IF、ELSE条件

Mod_重写子目录中相应的php文件

莫德克斯.当我try 使用pThumb为手机压缩图像时,没有任何react

按列值将二维数组排序为不超过N个的递增组

我有一个显示记录的表格,每行在最右边有两个按钮.如何才能以正确的顺序获得表的值?

从字符串转换日期和/或时间时,Laravel转换失败

在WooCommercel邮箱通知上添加来自Apaczka插件的选定交付点

将 PHP 版本更改为 8.1,但 WordPress 认为我们正在使用版本 7.4?

WooCommerce:如果订单总数为零,则隐藏本地取货运输选项

如何更新 Laravel Eloquent 列强制转换为集合

在shopware 6.5上可以使用什么事件来判断刚刚支付的订单的状态

Laravel 10 - 使用缓存对 ThrottleRequest 进行限制

Shopware 6 AuthControllerDecorator已弃用

同时执行odbc_execute、odbc_fetch_row和odbc_result

如何在 Process facade 中转义特殊字符?

Laravel Websockets 错误:(WebSocket 在建立连接之前关闭)

PHP Remedy API 调用以创建附件无效的条目(使用 Postman Works!)

使用 OOP PHP 创建动态 WHERE 子句.如何实现 BETWEEN 运算符?