需要帮助使用正则表达式将“sassy”转换为“$ a55y”?

时间:2011-05-27 03:03:55

标签: regex

单词开头的任何s都应转换为$。

单词内的任何内容都应转换为5。

3 个答案:

答案 0 :(得分:3)

要匹配单词开头的s,请使用\b匹配字边界\w以匹配字母数字:

< S>
/\bs\w/

(正如@Matthew所指出的那样,\w真的是多余的:)

/\bs/    

一旦你在一个单词的开头替换了所有s,那么剩下的只有一个在单词内(我假设你也想要在结尾处替换s。带有5的单词,因此您只需使用

即可
/s/

为了完整性,这里是如何将它们放在一起(我将假设JavaScript):

function pimpMyEsses(str)
{
    return str.replace(/\bs/gi, '$').replace(/s/gi, '5');
}

console.log(pimpMyEsses('slither quantum Sassy. arcades'));
// > "$lither quantum $a55y. arcade5"

答案 1 :(得分:1)

根据语言,可以使用单个正则表达式捕获替换,并在程序上替换它们。这是一个PHP示例:

<?php

$word = 'sassy';
preg_match_all('/\b(s)|([^s]+)|(s)/', $word, $matches, PREG_SET_ORDER);

/* captures:
 *   $matches = array(
 *      array('s','s'),
 *      array('a','','a'),
 *      array('s','','','s'),
 *      array('s','','','s'),
 *      array('y','','y')
 *    )
 */

$newword = '';
foreach ($matches as $m){
    if ($m[1]) $newword .= '$';       # leading s   --> $
    elseif ($m[2]) $newword .= $m[2]; # not an s    --> as-is
    else $newword .= '5';             # any other s --> 5
}
echo $newword;

因为我使用\b来匹配“leading s”之前的字边界,所以字符串'sassy socks'变为'$a55y $ock5'

如果您只希望“sassy”开头的s成为$,请将正则表达式更改为:

'/^(s)|([^s]+)|(s)/'

答案 2 :(得分:0)

你可以这样做:

  • /^(s)/仅选择第一个“s”;
  • /(?:[^s])(?:(s)[^s]*)+选择所有其他“s”。请注意,将跳过第一个字符(与之无关);
    • 解释
      忽略第一个字符;
      重复一个或多个:获取“s”并忽略其他不是“s”的字符;

下一步:您需要确定要使用的语言。