PHP使用正则表达式提取尖括号、圆括号、方括号和大括号中的内容

向北走
向北走
发布时间:2026-10-14| 7人浏览过
原创

在PHP编程中经常需要处理包含各种符号的复杂字符串。如何高效地从混合文本中提取尖括号《》、小括号()、中括号[]及大括号{}内部的具体内容?本文将演示如何利用正则表达式的捕获组与断言功能,编写通用的提取函数,精准定位并获取特定符号间的文本数据。

括号类型的区别与匹配逻辑

在进行提取前,了解不同符号在正则中的角色至关重要:

  • 小括号 ():通常用于分组和多选结构(如 | 运算符),是正则中最常用的元字符。
  • 中括号 []:代表字符集合,内部字符被视为普通字符,除非包含范围符 -。例如 [0-9] 匹配单个数字。
  • 大括号 {}:主要用于量词,指定前面元素出现的次数,如 {n} 表示出现 n 次。

对于提取任务,我们需要关注的核心是边界界定。直接使用捕获组可能会将边界符号一同抓入结果数组,因此需要合理处理索引或使用非捕获/环视技巧。

准备测试环境与工具

本方案基于 PHP 环境运行。PHP 提供了强大的 PCRE(Perl Compatible Regular Expressions)扩展,主要使用以下函数:

  • preg_match_all():执行一个全局正则表达式匹配。

第1步:提取尖括号中的字符串

目的:从类似 你好<我> 的文本中提取“我”。

操作:先提取尖括号前内容(可选),再提取括号内内容。下面展示提取尖括号内容的函数:

$str = "你好<我>(爱)[北京]{天安门}";

// 提取尖括号 <...> 中的内容
function extractAngleBrackets($str) {
    $result = array();
    // 使用 (?:<) 作为起始锚点,匹配左括号但不捕获
    // (.*) 捕获中间的所有字符
    // (?::>) 匹配右括号但不捕获
    preg_match_all("/(?::<)(.*?)(?:>)/i", $str, $result);
    return isset($result[1][0]) ? $result[1][0] : "";
}
echo extractAngleBrackets($str); // 输出: 我

第2步:提取小括号中的字符串

目的:从 (爱) 中提取“爱”。

操作:转义左右小括号,确保其被当作普通字符处理而非正则分组符。

// 提取小括号 (...) 中的内容
function extractParentheses($str) {
    $result = array();
    // \( 和 \) 转义括号,防止被解析为分组指令
    preg_match_all("/(?::\()(.*?)(?:\))/i", $str, $result);
    return isset($result[1][0]) ? $result[1][0] : "";
}
echo extractParentheses($str); // 输出: 爱

第3步:提取中括号中的字符串

目的:从 [北京] 中提取“北京”。

操作:同理,需对中括号进行转义或放在合适位置以防误判为字符组。

// 提取中括号 [...] 中的内容
function extractSquareBrackets($str) {
    $result = array();
    // \[ 和 \] 转义中括号
    preg_match_all("/(?::\[)(.*?)(?:\])/i", $str, $result);
    return isset($result[1][0]) ? $result[1][0] : "";
}
echo extractSquareBrackets($str); // 输出: 北京

第4步:提取大括号中的字符串

目的:从 {天安门} 中提取“天安门”。

操作:转义大括号。

// 提取大括号 {...} 中的内容
function extractCurlyBrackets($str) {
    $result = array();
    // \{ 和 \} 转义大括号
    preg_match_all("/(?::\{)(.*?)(?:\})/i", $str, $result);
    return isset($result[1][0]) ? $result[1][0] : "";
}
echo extractCurlyBrackets($str); // 输出: 天安门

完成判断与注意事项

验证上述代码,每个函数均能准确返回对应括号内的文本。
**注意要点**:
1. (?: 语法表示“非捕获组”,它只匹配模式但不将匹配到的子串存入结果数组,从而让 (.*) 的内容位于 $result[1] 而非 $result[2],简化了数组索引管理。
2. 若PHP版本不支持某些现代正则特性,可退而求其次,使用完整的捕获组并在取数时跳过索引0(全匹配)和偶数索引(边界符号组)。
3. .*? 使用了非贪婪匹配(Lazy Match),确保在有多个同类括号时,能逐个准确提取,而不是合并所有括号为一个长字符串。

简要总结

以上就是在PHP中使用正则表达式提取尖括号、小括号、中括号和大括号中字符串的详细内容,更多关于PHP字符串处理、正则进阶技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。