spatie/regex

php 内置 preg_* 函数的合理接口

3.1.1 2021-11-30 21:13 UTC

This package is auto-updated.

Last update: 2024-09-05 18:20:56 UTC


README

让正则表达式再次伟大

Latest Version on Packagist Tests Software License Total Downloads

Php 的内置 preg_* 函数需要一些奇怪的样式,如通过引用传递变量并将 falsenull 值视为错误。 spatie/regexpreg_matchpreg_match_allpreg_replacepreg_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)。有关更多信息,请参阅许可证文件