各编程语言对正则表达式标准的支持综合对比

作者:

文章目录
  • 支持程度: 最完整的正则表达式功能集 被视为正则表达式的"黄金标准" 特性支持: 完整支持PCRE(Perl兼容正则表达式) 支持递归匹配 (?R) 命名捕获 (?<name>…) 所有类型的断言(包括后行断言) 丰富的模式修饰符 示例: # 递归匹配嵌套括号 $str =~ /((?:[^()]++|(?R))*)/;
  • 支持程度: 通过 re 模块提供良好支持 第三方 regex 模块提供更完整支持 特性支持: 基本支持PCRE 支持命名捕获 (?P<name>…) 支持有限的后行断言 不支持递归匹配 regex 模块支持更多特性 示例: import re # 命名捕获组 match = re.search(r'(?P<year>d{4})-(?P<month>d{2})’, ‘2023-05’)
  • 支持程度: java.util.regex 包提供良好支持 接近PCRE但不完全相同 特性支持: 支持命名捕获 (?<name>…) 支持有限长度的后行断言 不支持递归匹配 支持Unicode属性 p{L} 示例: // 命名捕获组 Pattern p = Pattern.compile(“(?<year>\d{4})-(?<month>\d{2})”); Matcher m = p.matcher(“2023-05”);
  • 支持程度: 基本PCRE功能 ES6+增加了新特性 特性支持: 支持命名捕获 (?<name>…)(ES2018) 不支持后行断言(Safari除外) 不支持递归匹配 新增d标志(indices) 示例: // 命名捕获组 const match = ‘2023-05’.match(/(?<year>d{4})-(?<month>d{2})/);
  • 支持程度: 使用RE2引擎,功能有限但安全 设计目标是保证线性时间性能 特性支持: 不支持回溯(避免ReDoS攻击) 不支持后行断言 不支持递归匹配 支持命名捕获 (?P<name>…) 示例: // 命名捕获组 re := regexp.MustCompile(`(?P<year>d{4})-(?P<month>d{2})`)
  • 支持程度: 功能丰富的实现 支持平衡组等独特特性 特性支持: 支持递归匹配 (?<name>…) 和 (?<-name>) 完整的后行断言支持 支持条件匹配 (?(condition)yes|no) 示例: // 平衡组匹配嵌套括号 Regex r = new Regex(@”( (?: [^()]+ | (?<Open> ( ) | (?<-Open> ) ) )* (?(Open)(?!)) )”, RegexOptions.IgnorePatternWhitespace);
  • 支持程度: 基于PCRE库 支持Perl风格正则表达式 特性支持: 完整PCRE功能 支持递归匹配 (?R) 支持所有断言类型 支持条件模式 示例: // 递归匹配HTML标签 preg_match_all(‘/<([a-z]+)([^>]*)>(.*?)</1>/is’, $html, $matches);
  • 支持程度: 强大的Oniguruma引擎 接近Perl的支持度 特性支持: 支持命名捕获 (?<name>…) 支持递归匹配 g<name> 支持所有断言类型 支持原子分组 (?>…) 示例: # 递归匹配嵌套括号 str.gsub(/((?:[^()]|g<0>)*)/, “”)
  • 特性 Perl Python Java JS Go .NET PHP Ruby 命名捕获 ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ 后行断言 ✓ 有限 有限 ✗ ✗ ✓ ✓ ✓ 递归匹配 ✓ ✗ ✗ ✗ ✗ ✓ ✓ ✓ 原子分组 ✓ ✓ ✓ ✗ ✗ ✓ ✓ ✓ Unicode属性 ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ 条件匹配 ✓ ✗ ✗ ✗ ✗ ✓ ✓ ✓ 平衡组 ✗ ✗ ✗ ✗ ✗ ✓ ✗ ✗ 匹配时间保证 ✗ ✗ ✗ ✗ ✓ ✗ ✗ ✗
  • 最强大功能:Perl、PHP、Ruby、.NET 平衡选择:Python、Java 安全性优先:Go(避免ReDoS) 浏览器环境:JavaScript(注意兼容性) 不同语言的正则表达式实现各有侧重,选择时应考虑项目需求、性能要求和安全因素。 到此这篇关于各编程语言对正则表达式标准的支持综合对比的文章就介绍到这了,更多相关编程语言对正则表达式标准的支持内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: 正则表达式匹配不包含某些字符串的技巧 最新手机号码、电话号码正则表达式 正则表达式匹配各种特殊字符 正则表达式基本语法详解 grep用法详解 grep与正则表达式 用户名、密码等15个常用的js正则表达式 最全的常用正则表达式大全
  • 目录
    • 1. Perl – 黄金标准
    • 2. Python
    • 3. Java
    • 4. JavaScript
    • 5. Go
    • 6. .NET (C#)
    • 7. PHP
    • 8. Ruby
    • 支持程度对比表
    • 选择建议

    正则表达式在不同编程语言中的实现和支持程度有所差异,以下是主流编程语言对正则表达式标准支持的综合对比:

    支持程度

    • 最完整的正则表达式功能集
    • 被视为正则表达式的"黄金标准"

    特性支持

    • 完整支持PCRE(Perl兼容正则表达式)
    • 支持递归匹配 (?R)
    • 命名捕获 (?<name>...)
    • 所有类型的断言(包括后行断言)
    • 丰富的模式修饰符

    示例

    # 递归匹配嵌套括号
    $str =~ /((?:[^()]++|(?R))*)/;
    

    支持程度

    • 通过 re 模块提供良好支持
    • 第三方 regex 模块提供更完整支持

    特性支持

    • 基本支持PCRE
    • 支持命名捕获 (?P<name>...)
    • 支持有限的后行断言
    • 不支持递归匹配
    • regex 模块支持更多特性

    示例

    import re
    # 命名捕获组
    match = re.search(r'(?P<year>d{4})-(?P<month>d{2})', '2023-05')
    

    支持程度

    • java.util.regex 包提供良好支持
    • 接近PCRE但不完全相同

    特性支持

    • 支持命名捕获 (?<name>...)
    • 支持有限长度的后行断言
    • 不支持递归匹配
    • 支持Unicode属性 p{L}

    示例

    // 命名捕获组
    Pattern p = Pattern.compile("(?<year>\d{4})-(?<month>\d{2})");
    Matcher m = p.matcher("2023-05");
    

    支持程度

    • 基本PCRE功能
    • ES6+增加了新特性

    特性支持

    • 支持命名捕获 (?<name>...)(ES2018)
    • 不支持后行断言(Safari除外)
    • 不支持递归匹配
    • 新增d标志(indices)

    示例

    // 命名捕获组
    const match = '2023-05'.match(/(?<year>d{4})-(?<month>d{2})/);
    

    支持程度

    • 使用RE2引擎,功能有限但安全
    • 设计目标是保证线性时间性能

    特性支持

    • 不支持回溯(避免ReDoS攻击)
    • 不支持后行断言
    • 不支持递归匹配
    • 支持命名捕获 (?P<name>...)

    示例

    // 命名捕获组
    re := regexp.MustCompile(`(?P<year>d{4})-(?P<month>d{2})`)
    

    支持程度

    • 功能丰富的实现
    • 支持平衡组等独特特性

    特性支持

    • 支持递归匹配 (?<name>...)(?<-name>)
    • 完整的后行断言支持
    • 支持条件匹配 (?(condition)yes|no)

    示例

    // 平衡组匹配嵌套括号
    Regex r = new Regex(@"( (?: [^()]+ | (?<Open> ( ) | (?<-Open> ) ) )* (?(Open)(?!)) )", 
                       RegexOptions.IgnorePatternWhitespace);
    

    支持程度

    • 基于PCRE库
    • 支持Perl风格正则表达式

    特性支持

    • 完整PCRE功能
    • 支持递归匹配 (?R)
    • 支持所有断言类型
    • 支持条件模式

    示例

    // 递归匹配HTML标签
    preg_match_all('/<([a-z]+)([^>]*)>(.*?)</1>/is', $html, $matches);
    

    支持程度

    • 强大的Oniguruma引擎
    • 接近Perl的支持度

    特性支持

    • 支持命名捕获 (?<name>...)
    • 支持递归匹配 g<name>
    • 支持所有断言类型
    • 支持原子分组 (?>...)

    示例

    # 递归匹配嵌套括号
    str.gsub(/((?:[^()]|g<0>)*)/, "")
    

    特性 Perl Python Java JS Go .NET PHP Ruby
    命名捕获
    后行断言 有限 有限
    递归匹配
    原子分组
    Unicode属性
    条件匹配
    平衡组
    匹配时间保证

    1. 最强大功能:Perl、PHP、Ruby、.NET
    2. 平衡选择:Python、Java
    3. 安全性优先:Go(避免ReDoS)
    4. 浏览器环境:JavaScript(注意兼容性)

    不同语言的正则表达式实现各有侧重,选择时应考虑项目需求、性能要求和安全因素。

    到此这篇关于各编程语言对正则表达式标准的支持综合对比的文章就介绍到这了,更多相关编程语言对正则表达式标准的支持内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • 正则表达式匹配不包含某些字符串的技巧
    • 最新手机号码、电话号码正则表达式
    • 正则表达式匹配各种特殊字符
    • 正则表达式基本语法详解
    • grep用法详解 grep与正则表达式
    • 用户名、密码等15个常用的js正则表达式
    • 最全的常用正则表达式大全

    站内搜索