如何使用正则表达式在双花括号内将连字符(-)替换为下划线()

冬雪君_7608

冬雪君_7608

2026-05-21

917人浏览

原创

如何使用正则表达式在双花括号内将连字符(-)替换为下划线()

本文讲解如何精准匹配双花括号 {{...}} 内部的连字符 - 并将其替换为下划线 ``,重点解决转义缺失、贪婪匹配和捕获逻辑错误等常见问题,并提供可直接运行的 PHP 示例代码。

本文讲解如何精准匹配双花括号 `{{...}}` 内部的连字符 `-` 并将其替换为下划线 `_`,重点解决转义缺失、贪婪匹配和捕获逻辑错误等常见问题,并提供可直接运行的 php 示例代码。

在模板字符串处理中,常需对双花括号语法(如 {{first-name}})内的变量名进行标准化——例如将连字符 - 统一转为下划线 _。但直接使用 {{.+(-).+}} 这类正则表达式会失败,主要原因有三:

  1. 未转义元字符:{ 和 } 在正则中是量词符号(如 {3}),必须用反斜杠 \{ 和 \} 显式转义;
  2. 贪婪匹配越界:.+ 会跨多个 }} 匹配,导致误吞内容(如 {{a}} {{b-c}} 可能被整体捕获);
  3. 捕获组设计错误:原写法仅捕获一个 -,却试图用 $1_ 替换,但未保留 - 前后内容,造成信息丢失。

✅ 正确方案是:精确限定匹配范围 + 分段捕获 + 安全替换。

推荐正则表达式:

Opera’s AI Browser Operator
Opera’s AI Browser Operator

一款AI开发辅助工具,主要用于Opera推出的浏览器AI智能体助手,适合需要提升相关任务效率的用户。

下载
(\{\{[^}]+)-([^}]+\}\})
  • (\{\{[^}]+):捕获以 {{ 开头、后续为非 } 字符的任意长度子串(即 {{ 到第一个 - 前的部分);
  • -:字面量连字符,需被替换的目标;
  • ([^}]+\}\}):捕获从 - 后开始、直到 }} 结束的子串([^}]+ 确保不跨越 },避免贪婪越界)。

对应 PHP 代码如下:

$template = 'Hello {{first-name}}, how are you? The event {{event-name-address}}';
$pattern = '/(\{\{[^}]+)-([^}]+\}\})/';
$replacement = '${1}_$2'; // 注意:用 ${1} 避免 $1_ 被解析为变量 $1_
$result = preg_replace($pattern, $replacement, $template);

// 循环替换,确保处理所有连字符(因单次只替换最右一个 -)
while (preg_match($pattern, $result)) {
    $result = preg_replace($pattern, $replacement, $result);
}

echo $result;
// 输出:Hello {{first_name}}, how are you? The event {{event_name_address}}

⚠️ 关键注意事项:

  • 必须使用分隔符(如 /)包裹正则,否则 preg_replace() 会报错;
  • ${1} 比 $1 更安全,防止 _ 被误认为变量名的一部分;
  • 单次 preg_replace() 仅替换每对 {{}} 中最右侧的一个 -,因此需循环执行直至无匹配(或改用 preg_replace_callback 一次性处理全部 -);
  • 若需支持嵌套花括号(极少见),本方案不适用,应改用解析器而非正则。

该方案兼顾准确性与可读性,适用于 Laravel Blade、Twig 或自定义模板引擎中的变量名规范化场景。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

正则表达式

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

4296

8

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

2023.07.05

2841

4

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7802

9

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

2023.08.11

812

5

正则表达式空格
正则表达式空格

正则表达式空格可以用“\s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

520

5

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

673

12

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“\s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

2023.11.17

386

3

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.12.06

719

7

php正则表达式有哪些
php正则表达式有哪些

php正则表达式有"/pattern/"、"^"、"$"、"."、"[]"、"[^]"、"[a-z]"、"[A-Z]"、"[0-9]"、"\d"、"\D"、"\w"、"\W"、&a

2024.02.23

312

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21万人学习

JavaScript正则表达式基础与实战
JavaScript正则表达式基础与实战

共11课时 | 1.7万人学习

布尔教育正则表达式视频教程
布尔教育正则表达式视频教程

共14课时 | 5.1万人学习