gherkins / regexpbuilderphp
binarysearchtree/regexpbuilderjs的PHP端口
2.1.1
2024-01-01 14:41 UTC
Requires
- php: ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.0
README
____ _____ ____ _ _ _ ____ _ _ ____ | _ \ ___ __ _| ____|_ ___ __ | __ ) _ _(_) | __| | ___ _ __| _ \| | | | _ \ | |_) / _ \/ _` | _| \ \/ / '_ \| _ \| | | | | |/ _` |/ _ \ '__| |_) | |_| | |_) | | _ < __/ (_| | |___ > <| |_) | |_) | |_| | | | (_| | __/ | | __/| _ | __/ |_| \_\___|\__, |_____/_/\_\ .__/|____/ \__,_|_|_|\__,_|\___|_| |_| |_| |_|_| |___/ |_|
PHP的易读正则表达式
regexpbuilderjs的PHP端口
RegExpBuilder将正则表达式集成到编程语言中,因此使它们易于阅读和维护。正则表达式通过使用链式方法和变量(如数组或字符串)创建。
安装
composer req gherkins/regexpbuilderphp
或下载适当的版本,并从/src
中require RegExpBuilder.php
和RegExp.php
。
文档
https://github.com/gherkins/regexpbuilderphp/wiki
示例
use Gherkins\RegExpBuilderPHP; $builder = new RegExpBuilder();
验证
$regExp = $builder ->startOfInput() ->exactly(4)->digits() ->then("_") ->exactly(2)->digits() ->then("_") ->min(3)->max(10)->letters() ->then(".") ->anyOf(array("png", "jpg", "gif")) ->endOfInput() ->getRegExp(); //true $regExp->matches("2020_10_hund.jpg"); $regExp->matches("2030_11_katze.png"); $regExp->matches("4000_99_maus.gif"); //false $regExp->matches("123_00_nein.gif"); $regExp->matches("4000_0_nein.pdf"); $regExp->matches("201505_nein.jpg");
搜索
$regExp = $builder ->multiLine() ->globalMatch() ->min(1)->max(10)->anythingBut(" ") ->anyOf(array(".pdf", ".doc")) ->getRegExp(); $text = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy SomeFile.pdf eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. doc_04.pdf Stet clita kasd File.doc.' $matches = $regExp->findIn($text); //true ($matches[0] === "SomeFile.pdf"); ($matches[1] === "doc_04.pdf"); ($matches[2] === "File.doc");
替换
$regExp = $builder ->min(1) ->max(10) ->digits() ->getRegExp(); $text = "98 bottles of beer on the wall"; $text = $regExp->replace( $text, function ($match) { return (int)$match + 1; } ); //true ("99 bottles of beer on the wall" === $text);
使用多个模式的验证
$a = $builder ->startOfInput() ->exactly(3)->digits() ->anyOf(array(".pdf", ".doc")) ->endOfInput(); $b = $builder ->getNew() ->startOfInput() ->exactly(4)->letters() ->then(".jpg") ->endOfInput(); $regExp = $builder ->getNew() ->eitherFind($a) ->orFind($b) ->getRegExp(); //true $regExp->matches("123.pdf"); $regExp->matches("456.doc"); $regExp->matches("bbbb.jpg"); $regExp->matches("aaaa.jpg"); //false $regExp->matches("1234.pdf"); $regExp->matches("123.gif"); $regExp->matches("aaaaa.jpg"); $regExp->matches("456.docx");
查看更多示例,请参阅测试。