spatie / regex
php 内置 preg_* 函数的合理接口
Requires
- php: ^8.0|^8.1
Requires (Dev)
- phpunit/phpunit: ^9.3
README
让正则表达式再次伟大
Php 的内置 preg_*
函数需要一些奇怪的样式,如通过引用传递变量并将 false
或 null
值视为错误。 spatie/regex
为 preg_match
、preg_match_all
、preg_replace
和 preg_replace_callback
提供了一个更干净的接口。
use Spatie\Regex\Regex; // Using `match` Regex::match('/a/', 'abc'); // `MatchResult` object Regex::match('/a/', 'abc')->hasMatch(); // true Regex::match('/a/', 'abc')->result(); // 'a' // Capturing groups with `match` Regex::match('/a(b)/', 'abc')->result(); // 'ab' Regex::match('/a(b)/', 'abc')->group(1); // 'b' // Setting defaults Regex::match('/a(b)/', 'xyz')->resultOr('default'); // 'default' Regex::match('/a(b)/', 'xyz')->groupOr(1, 'default'); // 'default' // Using `matchAll` Regex::matchAll('/a/', 'abcabc')->hasMatch(); // true Regex::matchAll('/a/', 'abcabc')->results(); // Array of `MatchResult` objects // Using replace Regex::replace('/a/', 'b', 'abc')->result(); // 'bbc'; Regex::replace('/a/', function (MatchResult $result) { return $result->result() . 'Hello!'; }, 'abc')->result(); // 'aHello!bc';
Spatie 是一家总部位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 在这里。
支持我们
我们在创建 最佳开源包 上投入了大量资源。您可以通过 购买我们的付费产品之一 来支持我们。
我们非常感谢您从您的家乡寄给我们一张明信片,并说明您正在使用我们的哪些包。您可以在我们的 联系页面 上找到我们的地址。我们将发布所有收到的明信片在我们的 虚拟明信片墙上。
安装
您可以通过 composer 安装此包
composer require spatie/regex
使用
匹配一次模式
在主题上匹配模式。返回第一个匹配的 MatchResult
对象。
/** * @param string $pattern * @param string $subject * * @return \Spatie\Regex\MatchResult */ Regex::match(string $pattern, string $subject): MatchResult
MatchResult::hasMatch(): bool
检查模式是否匹配主题。
Regex::match('/abc/', 'abc')->hasMatch(); // true Regex::match('/def/', 'abc')->hasMatch(); // false
MatchResult::result(): string
返回所做的完整匹配。如果没有匹配,则返回 null
。
Regex::match('/abc/', 'abc')->result(); // 'abc' Regex::match('/def/', 'abc')->result(); // null
MatchResult::group(int $id): string
返回一个捕获组的内 容(使用 1 为基数索引)。如果该组不存在,则抛出 RegexFailed
异常。
Regex::match('/a(b)c/', 'abc')->group(1); // 'b' Regex::match('/a(b)c/', 'abc')->group(2); // `RegexFailed` exception
匹配模式的所有出现
在主题上匹配模式。返回包含所有匹配的 MatchAllResult
对象。
/** * @param string $pattern * @param string $subject * * @return \Spatie\Regex\MatchAllResult */ public static function matchAll(string $pattern, string $subject): MatchAllResult
MatchAllResult::hasMatch(): bool
检查模式是否匹配主题。
Regex::matchAll('/abc/', 'abc')->hasMatch(); // true Regex::matchAll('/abc/', 'abcabc')->hasMatch(); // true Regex::matchAll('/def/', 'abc')->hasMatch(); // false
MatchAllResult::results(): array
返回一个包含 MatchResult
对象的数组。
$results = Regex::matchAll('/ab([a-z])/', 'abcabd')->results(); $results[0]->result(); // 'abc' $results[0]->group(1); // 'c' $results[1]->result(); // 'abd' $results[1]->group(1); // 'd'
在主题中替换模式
在主题中替换模式。返回一个 ReplaceResult
对象。
/** * @param string|array $pattern * @param string|array|callable $replacement * @param string|array $subject * @param int $limit * * @return \Spatie\Regex\ReplaceResult */ public static function replace($pattern, $replacement, $subject, $limit = -1): ReplaceResult
ReplaceResult::result(): mixed
Regex::replace('/a/', 'b', 'abc')->result(); // 'bbc'
Regex::replace
也与可调用函数一起工作。可调用函数将接收一个 MatchResult
实例作为其参数。
Regex::replace('/a/', function (MatchResult $matchResult) { return str_repeat($matchResult->result(), 2); }, 'abc')->result(); // 'aabc'
模式、替换和主题也可以是数组。在这些情况下,Regex::replace
的行为与 preg_replace
完全相同。
错误处理
如果 Regex
方法中发生任何错误,将抛出 RegexFailed
异常。无需检查 preg_last_error()
。
测试
$ composer test
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全漏洞
请审查我们的安全策略,了解如何报告安全漏洞:安全策略。
Postcardware
您可以使用这个包,但如果它进入了您的生产环境,我们非常欢迎您从家乡寄给我们一张明信片,提及您正在使用我们的哪个包。
我们的地址是:Spatie,Kruikstraat 22,2018 安特卫普,比利时。
我们将所有收到的明信片发布在我们的公司网站上:公司网站。
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。