正则表达式匹配第一个单词,直到第一个 space 不包含 UTF 8 字符串中的数字

Regex to match first word until first space not containg numbers in UTF8 string

要找到第一个单词直到第一个 space 我使用正则表达式:

([^\s]+)

但是如何找到第一个 space 不包含数字

的单词

例如字符串是:

正则表达式 ([^\s(?<!\d)$]+)

return只有我

First

您可以使用

^(?:(?=\S*\d)\S+(?:\s+(?=\S*\d)\S+)*\W*)?\K\S*

demo

正则表达式匹配:

  • ^ - 字符串的开头
  • (?:(?=\S*\d)\S+(?:\s+(?=\S*\d)\S+)*\W*)? - 一次或零次出现(即它是可选的)......
    • (?=\S*\d)\S+ - 除空格外的一个或多个字符至少应包含一位数字
    • (?:\s+(?=\S*\d)\S+)* - 零个或多个......
      • \s+ - 一个或多个空白字符
      • (?=\S*\d)\S+ - 同上。
    • \W* - 零个或多个 non-word 个字符
  • \K - 省略缓冲区中到目前为止匹配的整个文本
  • \S* - 零个或多个 non-whitespace 个字符

PHP code:

$re = '~^(?:(?=\S*\d)\S+(?:\s+(?=\S*\d)\S+)*\W*)?\K\S*~u'; 
$arr = array("First12word50 Secųond-Word Thirdųword", "First1-2word50 Secųond/Word Thirdųword",
        "First1/2word50 Secųond+Word Thirdųword", "First1/2word50 Secųond1+Word Thirdų-word",
        "First1/2word50 Sec1ųond1+Word Thir11dų-word"); 
foreach ($arr as $s) {
    preg_match($re, $s, $m);
    echo '"' . $m[0] . "\"\n";
}