单词开头的任何s都应转换为$。
单词内的任何内容都应转换为5。
答案 0 :(得分:3)
要匹配单词开头的s
,请使用\b
匹配字边界和 \w
以匹配字母数字:
/\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”。请注意,将跳过第一个字符(与之无关);
下一步:您需要确定要使用的语言。