"使preg_split"除了数字

时间:2017-06-12 07:51:51

标签: php regex

我可以打印代码的第一个字母,但我不希望它涉及数字。

代码:

$str= "This is a example word and 3512987 ID registered.."
$words = preg_split("/(\s|\-|\(|\s+|\.)/", $str);

打印

TIAEWA3IR --> This is correct but I want full print digit. For example:

TIAEWA3512987IR --> this version with full-digit 

为此,我需要一个正则表达式代码?

1 个答案:

答案 0 :(得分:1)

如果您需要从字符串中获取1个数字的单词和块中的第一个ASCII字母数组,请使用

preg_match_all('~\b[a-zA-Z]|\d+~', $str, $matches);

请参阅PHP demo

$str = "This is a example word and 3512987 ID registered..";
preg_match_all('~\b[a-zA-Z]|\d+~', $str, $matches);
print_r($matches[0]);

您可以稍后implode数组或根据需要使用其他操作(例如implode("", array_map('ucfirst', $matches[0])),请参阅demo)。

<强>详情:

  • \b[a-zA-Z] - 以字边界开头的ASCII字母
  • | - 或
  • \d+ - 1+位。

要使正则表达式使用任何UNICODE字母,请将[a-zA-Z]替换为\p{L} Unicode category class字母图案,然后添加u UNICODE修饰符这将使preg_函数能够将输入字符串正确地视为Unicode字符串,并且PCRE egnine也会将\p{L}\b视为Unicode识别模式:

preg_match_all('~\b\p{L}|\d+~u', $str, $matches);
                   ^^^^^     ^

请注意,\d也会开始匹配从09的非ASCII数字的数字。然后,如果您想阻止它,请改为使用[0-9]+

preg_match_all('~\b\p{L}|[0-9]+~u', $str, $matches);
                         ^^^^^