如何在PHP中的分隔符之前获取第一个单词

时间:2017-02-14 13:41:16

标签: php

所以基本上我有一个这样的字符串:

kbIr cugY icqwrY BI; cugY cuig cuig icqwry ]

我该怎么做才能让PHP在;之前获取字符串的一部分,然后获取分隔符之前的第一个单词,以便输出为:

BI

到目前为止,我有:strtok($g, ';');,但只能在分隔符之前获取字符串的前半部分,而不是分隔符之前的第一个字。

3 个答案:

答案 0 :(得分:3)

此正则表达式模式匹配上部和下部字母(没有空格),后跟分号。我还为捕获添加了一个命名组。

(?P<sep>[a-zA-Z]*);

使用示例

$re = '/(?P<sep>[a-zA-Z]*);/';
$str = 'kbIr cugY icqwrY BI; cugY cuig cuig icqwry ]';

preg_match_all($re, $str, $matches);

// Print the entire match result
print_r($matches);

输出

Array
(
    [0] => Array
        (
            [0] => BI;
        )

    [sep] => Array
        (
            [0] => BI
        )

    [1] => Array
        (
            [0] => BI
        )
)

简化

if (isset($matches['sep']) and len($matches['sep']) > 0) {
    echo $matches['sep'][0]; // BI
}

答案 1 :(得分:2)

只是要完整,如果你不喜欢正则表达式:

$value = end(explode(" ", array_shift(explode(";", "kbIr cugY icqwrY BI; cugY cuig cuig icqwry ]"))));

print_r($value); // prints BI

答案 2 :(得分:1)

要仅分隔符之前的第一个单词,它足以使用preg_match函数:

$str = 'kbIr cugY icqwrY BI; cugY cuig cuig icqwry ]';
preg_match("/\b\w+(?=;)/i", $str, $m);

print_r($m[0]);

输出:

BI