preg_replace 从单词中获取每两个字符
preg_replace get each two characters from a word
实际上,我正在尝试想出一种方法,通过使用 preg_replace 函数从 "Get Word" 中获取像 "GEWO" 这样的字符串。问题是也可以有像 "Get" 或 "Get Word And another Word" 这样的字符串,所以我必须分别获得正确的字符串。
谢谢!
使用这个:
$s = "Get Word And another Word";
$s = preg_replace('/(?<=\w{2})\w*\b(\s|$)/','',$s);
$s = strtoupper($s);
echo $s;
输出:GEWOANANWO
你可以不使用 REGEX 来做到这一点,像这样:
$str = 'Get Word';
$arr = explode(" ", $str);
foreach($arr as $word){
$newstr .= strtoupper(substr($word, 0, 2));
}
echo $newstr;
//=> GEWO
Online Demo
正则表达式模式中不需要环顾四周。
我将使用 \w
作为正则表达式元字符来表示您的话中的字符。 \w
表示任何字母、数字或下划线。如果您愿意,可以将其与 \S
交换以匹配任何 non-whitespace。匹配前两个单词字符,然后用 \K
“忘记它们”(这“重新开始完整的字符串匹配”),然后匹配零个或多个单词字符(以消耗单词的其余部分),然后匹配零个或更多 non-word 个字符(以匹配 space 或下一个潜在单词之前的其他定界字符)。用空字符串替换这些匹配项
代码:(Demo)
echo strtoupper(
preg_replace(
'~\w{2}\K\w*\W*~',
'',
$string
)
);
Extract items through isolation wanting your utility
变成
EXITTHISWAYOUT
和
Cannot remember better arguments!
CAREBEAR
还有很多边缘场景,比如单字母单词,但我不会无谓地钻空子。
实际上,我正在尝试想出一种方法,通过使用 preg_replace 函数从 "Get Word" 中获取像 "GEWO" 这样的字符串。问题是也可以有像 "Get" 或 "Get Word And another Word" 这样的字符串,所以我必须分别获得正确的字符串。
谢谢!
使用这个:
$s = "Get Word And another Word";
$s = preg_replace('/(?<=\w{2})\w*\b(\s|$)/','',$s);
$s = strtoupper($s);
echo $s;
输出:GEWOANANWO
你可以不使用 REGEX 来做到这一点,像这样:
$str = 'Get Word';
$arr = explode(" ", $str);
foreach($arr as $word){
$newstr .= strtoupper(substr($word, 0, 2));
}
echo $newstr;
//=> GEWO
Online Demo
正则表达式模式中不需要环顾四周。
我将使用 \w
作为正则表达式元字符来表示您的话中的字符。 \w
表示任何字母、数字或下划线。如果您愿意,可以将其与 \S
交换以匹配任何 non-whitespace。匹配前两个单词字符,然后用 \K
“忘记它们”(这“重新开始完整的字符串匹配”),然后匹配零个或多个单词字符(以消耗单词的其余部分),然后匹配零个或更多 non-word 个字符(以匹配 space 或下一个潜在单词之前的其他定界字符)。用空字符串替换这些匹配项
代码:(Demo)
echo strtoupper(
preg_replace(
'~\w{2}\K\w*\W*~',
'',
$string
)
);
Extract items through isolation wanting your utility
变成
EXITTHISWAYOUT
和
Cannot remember better arguments!
CAREBEAR
还有很多边缘场景,比如单字母单词,但我不会无谓地钻空子。