我有一个字符串
这是一个示例文本。这个文本将被用作"各种" RegEx"运营"使用PHP。
我想选择并替换每个单词的所有第一个字母(在例子中: T,i,a,s,t,T,t,w,b,u,a,d,f, ",R,",U,P )。我该怎么做?
我试过了/\b.{1}\w+\b/
。我将表达式读作"选择任何长度为1的字符,后跟任意长度的字符"但是没有工作。
答案 0 :(得分:2)
答案 1 :(得分:1)
你的正则表达式 - /\b.{1}\w+\b/
- 匹配任何未包含在单词字符中的字符串,以字边界后面的任何符号开头(因此,如果有字母,它甚至可以是空格/它前面的数字/下划线),后跟一个或多个字母数字符号(\w
)直到字边界。
\b.
是罪魁祸首。
如果您打算匹配前面带有空格的任何非空格,您可以使用
/(?<!\S)\S/
或者
/(?<=^|\s)\S/
请参阅demo
然后,替换为您需要的任何符号。
答案 2 :(得分:0)
您可以尝试使用以下正则表达式:
(.)[^\s]*\s?
使用preg_match_all并内嵌输出结果组1
<?php
$string = 'This is a sample text. This text will be used as a dummy for'
. '"various" RegEx "operations" using PHP.';
$pattern = '/(.)[^\s]*\s?/';
$matches;
preg_match_all($pattern, $string, $matches);
$output = implode('', $matches[1]);
echo $output; //Output is TiastTtwbuaadf"R"uP
对于替换使用像preg_replace_callback之类的东西:
$pattern = '/(.)([^\s]*\s?)/';
$output2 = preg_replace_callback($pattern,
function($match) { return '_' . $match[2]; }, $string);
//result: _his _s _ _ample _ext. _his _ext _ill _e _sed _s _ _ummy _or _various" _egEx _operations" _sing _HP.