madkom/regex

PHP正则表达式函数的PCRE包装器

1.0.0 2016-03-04 18:37 UTC

This package is not auto-updated.

Last update: 2024-09-20 19:04:25 UTC


README

该包以面向对象的方式实现了各种PCRE元素。包括 模式匹配器替换器分割器 对象。

所有方法都可以抛出异常: BacktrackLimitExceptionBadUtf8ExceptionBadUtf8OffsetExceptionInternalExceptionJitStackLimitExceptionRecursionLimitException,因此您不必使用 preg_last_error() 和比较定义来检查;

PHP 7.0 Build Status Latest Stable Version Total Downloads License Coverage Status Code Climate Issue Count

安装

使用Composer安装

composer require madkom/regex

使用方法

使用模式

use Madkom\RegEx\Pattern;

$pattern = new Pattern('<((?=[^!])(/)?([^>]+))>');
$pattern->getPattern(); // "/<((?=[^!])(\/)?([^>]+))>/"

匹配模式

use Madkom\RegEx\Matcher;
use Madkom\RegEx\Pattern;

$pattern = new Pattern('<((?=[^/]+)[^>]+)>');
$matcher = new Matcher($pattern, 's');

$subject = <<<EOL
<!DOCTYPE html>
<html>
<head><title>Ala ma kota</title></head>
<body><h1>Ala ma kota</h1></body>
</html>
EOL;

$match = $matcher->match($subject);

//array:2 [
//  0 => "<!DOCTYPE html>"
//  1 => "!DOCTYPE html"
//]

匹配模式并捕获所有匹配项

use Madkom\RegEx\Matcher;
use Madkom\RegEx\Pattern;

$pattern = new Pattern('<((?=[^/]+)[^>]+)>');
$matcher = new Matcher($pattern, 's');

$subject = <<<EOL
<!DOCTYPE html>
<html>
<head><title>Ala ma kota</title></head>
<body><h1>Ala ma kota</h1></body>
</html>
EOL;

$match = $matcher->matchAll($subject);

//array:2 [
//  0 => array:6 [
//    0 => "<!DOCTYPE html>"
//    1 => "<html>"
//    2 => "<head>"
//    3 => "<title>"
//    4 => "<body>"
//    5 => "<h1>"
//  ]
//  1 => array:6 [
//    0 => "!DOCTYPE html"
//    1 => "html"
//    2 => "head"
//    3 => "title"
//    4 => "body"
//    5 => "h1"
//  ]
//]

替换并使用替换

use Madkom\RegEx\Replacer;
use Madkom\RegEx\Pattern;

$pattern = new Pattern('<((?=[^!])(/)?([^>]+))>');
$replacer = new Replacer($pattern, 's');

$subject = <<<EOL
<!DOCTYPE html>
<html>
<head><title>Ala ma kota</title></head>
<body><h1>Ala ma kota</h1></body>
</html>
EOL;

$replaced = $replacer->replace($subject, '<\\2xhtml:\\3>');

//<!DOCTYPE html>\n
//<xhtml:html>\n
//<xhtml:head><xhtml:title>Ala ma kota</xhtml:title></xhtml:head>\n
//<xhtml:body><xhtml:h1>Ala ma kota</xhtml:h1></xhtml:body>\n
//</xhtml:html>

替换并使用处理程序

use Madkom\RegEx\Replacer;
use Madkom\RegEx\Pattern;

$pattern = new Pattern('<((?=[^!])(/)?([^>]+))>');
$replacer = new Replacer($pattern, 's');

$subject = <<<EOL
<!DOCTYPE html>
<html>
<head><title>Ala ma kota</title></head>
<body><h1>Ala ma kota</h1></body>
</html>
EOL;

$replaced = $replacer->replaceWith($subject, function ($match) {
    return "<{$match[2]}xhtml:{$match[3]}>";
});

//<!DOCTYPE html>\n
//<xhtml:html>\n
//<xhtml:head><xhtml:title>Ala ma kota</xhtml:title></xhtml:head>\n
//<xhtml:body><xhtml:h1>Ala ma kota</xhtml:h1></xhtml:body>\n
//</xhtml:html>

分割

use Madkom\RegEx\Splitter;
use Madkom\RegEx\Pattern;

$subject = "html, simple, kayword, complex keyword, keyword with ; semicolon";

$pattern = new Pattern('([,]\s*)');
$splitter = new Splitter($pattern);
$splitted = $splitter->split($subject);

//array:5 [
//  0 => "html"
//  1 => "simple"
//  2 => "kayword"
//  3 => "complex keyword"
//  4 => "keyword with ; semicolon"
//]

在数组中grep

use Madkom\RegEx\Grepper;
use Madkom\RegEx\Pattern;

$subjects = [
    '<a href="http://madkom.pl">madkom.pl</a>',
    '<a href="http://google.pl">google.pl</a>',
    '<a href="http://bing.com">bing.com</a>',
    '<a href="https://example.pl">example.pl</a>',
    '<a href="https://example.org">example.org</a>',
];

$pattern = new Pattern('(http[s]?://[a-z0-9]+\.pl)');
$grepper = new Grepper($pattern, 'iU');
$grepped = $grepper->grep($subjects);

//array:3 [
//  0 => "<a href="http://madkom.pl">madkom.pl</a>"
//  1 => "<a href="http://google.pl">google.pl</a>"
//  3 => "<a href="https://example.pl">example.pl</a>"
//]

许可证

MIT许可证(MIT)

版权所有 (c) 2016 Madkom S.A.

特此授予任何获得本软件及其相关文档副本(“软件”)的人免费使用软件的权利,不受限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供方提供软件的人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任承担责任,无论该责任基于合同、侵权或其他法律依据,是否因软件或软件的使用或其他方式产生。