obf/regexp

Opsbears 框架正则表达式组件

该软件包的官方仓库似乎已不存在,因此该软件包已被冻结。

v1.2.3 2016-03-15 12:08 UTC

This package is not auto-updated.

Last update: 2020-06-22 05:38:17 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

摘要

PHP 中的正则表达式可能比较困难,尤其是如果你需要适当的错误处理。OBF RegExp 组件可以帮助你解决这个问题。它还以对象的形式提供了对正则表达式匹配组的更容易访问。

安装

要安装 OBF RegExp 组件,请使用 composer

composer require obf/regexp

用法

警告

OBF 实现与 PHP 实现在一些细节上有所不同

  • 默认情况下,所有正则表达式都设置了 DOLLAR_ENDONLY (D) 修饰符。可以通过将 $pcreDollarEndOnlyBehavior 参数设置为 true 来更改此设置。(我们认为原始行为是愚蠢的。)

执行正则表达式匹配

要执行 RegExp 匹配,请使用 RegExp::match() 函数

if (RegExp::match('/^[a-z]+$', 'asdf')) {
    // Do something 
}

获取匹配组的匹配

RegExp::match() 函数的第三个参数是一个通过引用传递的变量。匹配成功后,该变量将包含一个 RegExpMatch 对象,可以用来获取特定的匹配组

if (RegExp::match('/([A-Z])([0-9])/', 'A1', $match)) {
    echo($match[0]);
    echo($match->getMatchGroup(0));
}

计数匹配

如果你要进行多次匹配,可以使用 RegExp::matchAll() 函数

$count = RegExp::matchAll('/[A-Z][0-9]/', 'A1B2C3');

$count 变量将包含匹配的数量。

获取多次匹配的匹配组

RegExp::matchAll() 函数还接受匹配参数,但它包含的是一个 RegExpMatch 对象的数组,而不是单个 RegExpMatch 对象

RegExp::matchAll('/(?P<letter>[A-Z])([0-9])/', 'A1B2C3', $matches);
foreach ($matches as $match) {
	echo($match->getMatchGroup('letter'));
}

处理错误

有时你会使用来自未经测试或不可靠来源的正则表达式。幸运的是,RegExp 为这些情况提供了适当的异常

try {
    if (RegExp::match('/[a-z]', 'asdf')) {
        // Do something
    }
} catch (RegExpError $e) {
    // Handle error
}

许可

该库在 MIT 许可下发布。