需要从php中的句子中提取字符

时间:2017-10-06 10:47:54

标签: php regex

我有一个像

这样的句子

“:Lim Chee Kong \ S717613 IB CUST。”

我需要提取名字Lim Chee Kong。这是使用php preg match或任何其他规则的任何数字或特殊字符之前或之后的第一个单词。

句子可以是动态的。

4 个答案:

答案 0 :(得分:1)

$str = ": Lim Chee Kong \ S717613 IB CUST.";
$res = preg_split("/[^A-Za-z]/",$str);
$result = Array();
$wordFound = false;
$noMoreWords = false;
foreach($res as $key=>$words) {
    if($words != '' && !$noMoreWords) {
        $result[] = $words;
        $wordFound = true;
    }
    if($wordFound && $words == '') {
        $noMoreWords = true;
    }
}
echo implode(" ",$result); //Lim Chee Kong

答案 1 :(得分:0)

您对正则表达式的定义与您的示例不兼容。 “这是第一个字......” - > Lim Chee Kong不是一个字。这是一组由空白分隔的单词 “...在任意数量的特殊字符之前或之后” - >对于您的示例中的子串“IB CUST”也是如此。

也就是说,以下是匹配一组可选的字符包围的单词:

\W*\b([a-zA-Z\s]+)\b\W*

在你的例子中,这是“Lim Chee Kong”和“IB CUST”。

答案 2 :(得分:0)

正如您所说,这个名称是从数组中回显的,您可以这样做:(我不知道你为什么要拆分它。)

您的数组作为示例:

$array = ['name' => 'Lim Chee Kong', 'extra' => 'S717613 IB CUST'];

回应:

echo ' ":' . $array['name'] . ' \ ' . $array['extra'] . '." ';

<强>结果:

  

&#34;:Lim Chee Kong \ S717613 IB CUST。&#34;

阵列可能包含要回显的其他信息。这是你需要的吗?

答案 3 :(得分:0)

只需使用preg_match功能即可。

示例:

<?php
$string = ": Lim Chee Kong \ S717613 IB CUST.";
preg_match('/^[^\w]*([\w\s]+)\s[^\w]+/', $string, $m);
echo $m[1];