tcb13/substringy

一个支持多字节的子字符串操作库,它扩展了Stringy

1.0.0 2017-10-10 16:40 UTC

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继承的方法。

Build Status

安装

如果你使用Composer来管理依赖项,你可以在你的composer.json文件中包含以下内容

{
    "require": {
        "danielstjules/stringy": "^3.1",
        "tcb13/substringy": "^1.0"
    }
}

然后,在运行composer updatephp 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来创建增强SubStringySliceableStringy功能的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是不可变的,对offsetSetoffsetUnset的任何调用都会抛出异常。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的库列表

测试

从项目目录下,可以使用phpunit运行测试

许可证

发布于MIT许可证下 - 详细信息请见LICENSE.txt