obf / regexp
Opsbears 框架正则表达式组件
该软件包的官方仓库似乎已不存在,因此该软件包已被冻结。
v1.2.3
2016-03-15 12:08 UTC
Requires
- php: >=5.3
- obf/classloader: 1.*
- obf/foundation: ^0.9.0
- obf/validator: ^1.0.0
Requires (Dev)
- opsbears/coverage-reporter: ^0.0.3
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2020-06-22 05:38:17 UTC
README
摘要
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 许可下发布。