tcb13 / substringy
一个支持多字节的子字符串操作库,它扩展了Stringy
Requires
- php: >=5.4.0
- ext-mbstring: *
- danielstjules/stringy: ^3.1
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is auto-updated.
Last update: 2024-09-13 22:48:41 UTC
README
一个支持多字节的PHP子字符串操作库,它扩展了Stringy。提供面向对象的方法链。已测试且与PHP 5.4+和HHVM兼容。
此库扩展并添加了SubString功能到danielstjules/Stringy
,你应该查看它的文档以了解从SubStringy继承的方法。
安装
如果你使用Composer来管理依赖项,你可以在你的composer.json文件中包含以下内容
{ "require": { "danielstjules/stringy": "^3.1", "tcb13/substringy": "^1.0" } }
然后,在运行composer update
或php composer.phar update
之后,你可以使用Composer的自动加载来加载类
require 'vendor/autoload.php';
否则,你可以直接要求文件
require_once 'path/to/SubStringy/src/SubStringy.php';
在任何情况下,我都建议使用别名。
use SubStringy\SubStringy as S;
面向对象和链式调用
该库提供了面向对象的方法链,如下所示
use Stringy\Stringy as S; echo S::create('Fòô Bàř', 'UTF-8')->collapseWhitespace()->swapCase(); // 'fÒÔ bÀŘ'
Stringy\Stringy
有一个__toString()
方法,当对象在字符串上下文中使用时返回当前字符串,例如:(string) S::create('foo') // 'foo'
作为Trait使用
该库还提供了作为trait
使用的可能性。使用此trait,你可以构建自己的danielstjules/Stringy
抽象,并结合多个扩展
namespace Vendor\YourPackage; use Stringy\Stringy; use SubStringy\SubStringyTrait; use SliceableStringy\SliceableStringyTrait; class MyStringy extends Stringy { use SubStringyTrait; use SliceableStringyTrait; }
在下面的示例中,我们可以使用MyStringy
来创建增强SubStringy
和SliceableStringy
功能的Stringy
对象
use YourPackage\MyStringy as S; $sliceableSubstring = S::create('What are your plans today?')->substringAfterFirst('plans '); echo $sliceableSubstring['4:6'];
实现接口
SubStringy\SubStringy
实现了IteratorAggregate
接口,这意味着可以使用类实例使用foreach
$stringy = S::create('Fòô Bàř', 'UTF-8'); foreach ($stringy as $char) { echo $char; } // 'Fòô Bàř'
它实现了Countable
接口,允许使用count()
获取字符串中的字符数
$stringy = S::create('Fòô', 'UTF-8'); count($stringy); // 3
此外,实现了ArrayAccess
接口。因此,可以使用isset()
检查特定索引处的字符是否存在。由于Stringy\Stringy
是不可变的,对offsetSet
或offsetUnset
的任何调用都会抛出异常。offsetGet
已经实现,并接受正负索引。无效的索引会导致OutOfBoundsException
。
$stringy = S::create('Bàř', 'UTF-8'); echo $stringy[2]; // 'ř' echo $stringy[-2]; // 'à' isset($stringy[-4]); // false $stringy[3]; // OutOfBoundsException $stringy[2] = 'a'; // Exception
PHP 5.6创建
截至PHP 5.6,use function
可用用于导入函数。SubStringy公开了一个命名空间函数SubStringy\create
,它与SubStringy\SubStringy::create()
具有相同的行为。如果在PHP 5.6或支持use function
语法的其他运行时中运行,你可以利用更简单的API,如下所示
use function SubStringy\create as s; // Instead of: S::create('Fòô Bàř', 'UTF-8') s('Fòô Bàř', 'UTF-8')->collapseWhitespace()->swapCase();
方法
所有返回SubStringy对象或字符串的方法都不会修改原始内容。SubStringy对象是不可变的。
由于此库扩展并添加了SubString功能到danielstjules/Stringy
,你应该查看它的文档(https://github.com/danielstjules/Stringy/blob/master/README.md)以了解在工作时也可以透明地使用的其他方法。
注意:如果没有提供$encoding
,则默认为mb_internal_encoding()
。
substringAfterFirst
$stringy->substringAfterFirst(string $separator)
获取分隔符首次出现之后的部分子串。如果没有找到匹配项,则返回false。
S::create('What are your plans today?')->substringAfterFirst('plans ');
substringAfterLast
$stringy->substringAfterLast(string $separator)
获取分隔符最后出现之后的部分子串。如果没有找到匹配项,则返回false。
S::create('This is a String. How cool can a String be after all?')->substringAfterLast('String ');
substringBeforeFirst
$stringy->substringBeforeFirst(string $separator)
获取分隔符首次出现之前的部分子串。如果没有找到匹配项,则返回false。
S::create('What are your plans today?')->substringBeforeFirst(' plans');
substringBeforeLast
$stringy->substringBeforeLast(string $separator)
获取分隔符最后出现之前的部分子串。如果没有找到匹配项,则返回false。
S::create('What are your plans today? Any plans for tomorrow?')->substringBeforeLast(' plans');
substringBetween
$stringy->substringBetween(string $start, string $end)
从当前字符串中提取位于两个子串之间的子串。
S::create('What are your plans today?')->substringBetween('your ', ' today');
substringCount
$stringy->substringCount(string $substr)
计算当前字符串中子串出现的次数
S::create('how are you? are you sure you are ok?')->substringCount('are');
链接
以下是一些扩展Stringy的库列表
- SliceableStringy: PHP中的Python-like字符串切片
测试
从项目目录下,可以使用phpunit
运行测试
许可证
发布于MIT许可证下 - 详细信息请见LICENSE.txt