正则表达式匹配第一个单词,直到第一个 space 不包含 UTF 8 字符串中的数字
Regex to match first word until first space not containg numbers in UTF8 string
要找到第一个单词直到第一个 space 我使用正则表达式:
([^\s]+)
但是如何找到第一个 space 不包含数字
的单词
例如字符串是:
First12word50 Secųond-Word Thirdųword ' result must be Secųond-Word
First1-2word50 Secųond/Word Thirdųword ' result must be Secųond/Word
First1/2word50 Secųond+Word Thirdųword ' result must be Secųond+Word
First1/2word50 Secųond1+Word Thirdų-word ' result must be Thirdų-word
First1/2word50 Sec1ųond1+Word Thirdų-word ' result must be Thirdų-word
First1/2word50 Sec1ųond1+Word Thir11dų-word ' result must be EMPTY
正则表达式 ([^\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 个字符
$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";
}
要找到第一个单词直到第一个 space 我使用正则表达式:
([^\s]+)
但是如何找到第一个 space 不包含数字
的单词例如字符串是:
First12word50 Secųond-Word Thirdųword ' result must be Secųond-Word
First1-2word50 Secųond/Word Thirdųword ' result must be Secųond/Word
First1/2word50 Secųond+Word Thirdųword ' result must be Secųond+Word
First1/2word50 Secųond1+Word Thirdų-word ' result must be Thirdų-word
First1/2word50 Sec1ųond1+Word Thirdų-word ' result must be Thirdų-word
First1/2word50 Sec1ųond1+Word Thir11dų-word ' result must be EMPTY
正则表达式 ([^\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 个字符
$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";
}