PHP中的流畅正则表达式。

v0.5.3 2015-12-08 23:09 UTC

This package is auto-updated.

Last update: 2024-08-29 03:35:19 UTC


README

Build Status Total Downloads Latest Stable Version

Selvin Ortiz

描述

VerbalExpressions:JS启发,并在很大程度上基于Jesse LuotoVerbalExpressions:JS,PHP中的流畅正则表达式。

@see 以下为更多信息和灵感及致谢。

需求

  • PHP 5.3
  • Composer

安装

Flux 通过 packagecomposer 中可用

  • require: "selvinortiz/flux": "dev-master"
  • autoload: require_once 'path/to/vendor/autoload.php'
  • namespace: use SelvinOrtiz\Utils\Flux\Flux;
  • 实例化: $flux = Flux::getInstance();

您还可以克隆/下载此仓库并做您想做的事情:)

@示例

以下简单示例说明了您如何使用 flux 和它的流畅接口来构建复杂模式。

require_once realpath(__DIR__.'/../vendor/autoload.php');

use SelvinOrtiz\Utils\Flux\Flux;
use SelvinOrtiz\Utils\Flux\Helper;

// The subject string (URL)
$str	= 'http://www.selvinortiz.com';

// Building the pattern (Fluently)
$flux	= Flux::getInstance()
		->startOfLine()
		->find('http')
		->maybe('s')
		->then('://')
		->maybe('www.')
		->anythingBut('.')
		->either('.co', '.com')
		->ignoreCase()
		->endOfLine();

// Output the Flux instance
Helper::dump( $flux );

// Output the fluently built pattern (@see /src/SelvinOrtiz/Utils/Flux/Helper)
Helper::msg( $flux ); // /^(http)(s)?(\:\/\/)(www\.)?([^\.]*)(.co|.com)$/i

// Inspect the results
Helper::msg( $str );
Helper::msg( $flux->match( $str ) ? 'matched' : 'unmatched' );
Helper::msg( $flux->replace( 'https://$5$6', $str ) );

有关其他示例,请参阅 /etc 目录。

@更新日志

0.5.2

  • 添加了 length() 方法,该方法添加或替换了上一个调用中使用的修饰符
  • 添加了 getLastSegmentKey()
  • 添加了(空的)Factory 类,用于优化常用模式
  • 修复了 phpunit.xml 中的缩进和 EOF
  • 修复了 README 和示例文件中的注释错误 Pull Request #10

0.5.1

  • 添加了 getSegments(),它未包含在 0.5.0Issue #5
  • 添加了 removeSegment(),它也可以用于单元测试
  • 添加了 lineBreak()br(),它们匹配新行(DOS/Unix)
  • 添加了 clear(),它允许您清除模式并从头开始
  • 添加了 getPattern(),它编译表达式并返回它
  • 添加了作为 @todos 的弃用候选者
  • 修复了 add()raw() 之间的混合逻辑
  • 修复了 orTry() 方法的实现
  • 将 readme 中的示例移至 changelog 之上
  • 改进了单元测试

0.5.0 (Beta)

  • 添加了 getSegments() 以提高可测试性 Issue #5
  • 添加了 composer 包 selvinortiz/flux
  • 添加了 dev 分支
  • 添加了贡献说明
  • 添加了安装说明

0.4.5

  • 修复了内部命名空间冲突
  • 将命名空间从 Sortiz\Tools 更改为 SelvinOrtiz\Utils\Flux
  • 添加了 composer 支持 Issue #3
  • 添加了 addSeed()removeSeed() 方法 Issue #4
  • 添加了 getInstance() 静态方法
  • 添加了 FluxUrlExample.phpFluxDateExample.phpFluxPhoneExample.php
  • 添加了 getSeed() 以获取种子而不强制在对象上使用 __toString
  • 为模式添加了getSegment()方法,用于提取一个段(捕获组)
  • 实现了单元测试(60%覆盖率)问题 #3
  • 实现了完整的PSR-2规范(使用制表符而非空格)
  • match()replace()中启用了seed 问题 #4
  • 移除了example.php并在其他地方定义它们
  • 将示例移动到/etc目录下,并且每个文件定义一个示例
  • 其他小的修复和添加

0.4.0

  • Flux添加到Sortiz\Tools命名空间中
  • 实现了PSR-2规范(使用制表符而非空格)
  • 更新了Flux和此readme文件的版本号
  • example.php中更新了类的实例化,使用完全限定名称
  • 添加了对其他已移植flux的仓库的引用
  • 解决了问题 #3中概述的问题

0.3.0

  • 通过phone/date示例改进了文档
  • 添加了letters()方法
  • numbers()方法重命名为digits()
  • digits()添加了对量词的支持
  • 添加了ignoreCase()并提升其优先级高于inAnyCase()
  • 改进了文档化的API

认真考虑将名称更改为FluentX,有什么想法吗?

0.2.0

  • 添加了处理OR情况的either( $option1, $option2 [, $option3 ...] )方法
  • 更新了此readme文件中的fluent示例
  • 添加了许可证

0.1.0 (Alpha)

初始预览版发布

@Todo

  • 添加源代码注释
  • 添加对量词的支持
  • 添加更多高级用例的语言方法
  • 添加对已移植Flux的仓库的引用 (*)
  • 添加许可证说明 (*)
  • 添加贡献说明 (*)
  • 添加致谢 (*)

FLUX API

flux API旨在提供一个流畅的链式对象,用于构建模式。

startOfLine()

添加了行的开始^修饰符

endOfLine()

添加了行的结束$修饰符

find( $val ) & then( $val )

允许您通过一个必需的segment来增强模式,并转义正则表达式字符

maybe( $val )

允许您通过一个可选的segment来增强模式

any( $val ) & anyOf( $val )

允许您创建一个要匹配的字符集

anything()

向模式添加了一个通配符 (.*) segment,但它没有明确地使dotAll()生效

anythingBut( $val )

将匹配除$val中字符之外的任何内容,与any()anyOf()相反

br() & lineBreak()

允许您匹配新行(DOS/Unix)

tab()

向模式添加了(\t),这将匹配制表符

word()

向模式添加了(\w+),这将匹配单个单词

letters( $min=null, $max=null )

仅匹配字母字符,并使用$min$max创建量词

digits( $mix=null, $max=null )

仅匹配数字,并使用$min$max创建与word()类似的量词

range( $from, $to [, $from, $to ...])

允许您通过调用range('a', 'z', 0, 9)创建一个range字符类,如a-z0-9

orTry( $val='' )

允许您创建OR情况(this)|(else),并保留捕获顺序以在replace()中使用

ignoreCase() & inAnyCase()

向模式添加了i修饰符,这将允许您以不区分大小写的方式匹配

matchNewLine() & dotAll()

向模式添加了s修饰符,这将允许您在使用anything()时匹配换行符

multiline()

为模式添加 m 修饰符,允许您在多行中进行搜索

oneLine() & searchOneLine()

如果之前调用了 multiline(),则移除该修饰符

match( $subject )

简单地接受您的 $subject,将其与模式进行比较,并返回是否匹配

replace( $replacement, $subject )

您可以使用 $x 格式替换匹配的 segments,其中 x 是匹配 segment(int) 位置

getPattern()

返回编译后的模式,您也可以在调用 __toString() 的上下文中使用 flux 实例来获取它

clear()

清除创建的 pattern 以及 modifiersprefixessuffixes

Flux 其他功能

这是由 James Brooks 编写的 NodeJS Flux 的直接移植,他也是这个项目的合作者。

反馈

这最初是一个周末的实验,但我希望进一步发展,如果您有任何建议,请随时提出!

通过推特 @selvinortiz 与我联系,我们再从那里开始 :)

贡献

  1. 查找开放的问题或为新功能请求或错误打开一个新问题
  2. 将此存储库分叉以开始在 dev 分支或分叉中进行更改
  3. 编写一个测试,以显示错误已被修复或功能按预期工作
  4. 发送一个拉取请求,并烦扰我,直到我合并它或告诉你 no cigar; )

灵感 & 致谢

该项目受到 VerbalExpressions:JS 的启发,该软件由 Jesse Luoto 开发,他在 2013年7月20日 开始了一个周末项目,该项目在开发者社区中引起了广泛关注,并且该项目已经证明具有很大的潜力。

Flux 不是 VerbalExpressions 的直接移植,但如果您对 PHP 的直接 VerbalExpressions 移植感兴趣,请查看 VerbalExpressions:PHP,由 Mark Wilson 提供

VerbalExpressions 已经移植到 RubyJavaGroovy,截至本更新(2013年7月25日)。

有关创建 flux 的原因以及为什么应该使用它的背景信息,请参阅 问题 #7 以进行讨论。

MIT 许可证

FluxMIT 许可证 下发布,这意味着您可以随意使用它,我不会生气,因为我很善良; )