使用preg_replace()

时间:2015-08-31 07:50:29

标签: php regex

我有一个字符串

  

这是一个示例文本。这个文本将被用作"各种" RegEx"运营"使用PHP。

我想选择并替换每个单词的所有第一个字母(在例子中: T,i,a,s,t,T,t,w,b,u,a,d,f, ",R,",U,P )。我该怎么做?

我试过了/\b.{1}\w+\b/。我将表达式读作"选择任何长度为1的字符,后跟任意长度的字符"但是没有工作。

3 个答案:

答案 0 :(得分:2)

你也可以试试这个正则表达式:

(?<=\s|^)([a-zA-Z"])

Demo

答案 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.