我可以打印代码的第一个字母,但我不希望它涉及数字。
代码:
$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
为此,我需要一个正则表达式代码?
答案 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
也会开始匹配从0
到9
的非ASCII数字的数字。然后,如果您想阻止它,请改为使用[0-9]+
:
preg_match_all('~\b\p{L}|[0-9]+~u', $str, $matches);
^^^^^