Regex “需要帮助转换”;“时髦”;至$a55y“;使用正则表达式?

Regex “需要帮助转换”;“时髦”;至$a55y“;使用正则表达式?,regex,Regex,单词开头的任何s都应转换为$ 单词中的任何s都应转换为5。您可以执行以下操作: /^(s)/仅选择第一个“s” /(?:[^s])(?:(s)[^s]*)+选择所有其他“s”。请注意,将跳过第一个字符(独立于); 解释:忽略第一个字符重复一个或多个:获取“s”并忽略其他非“s”的字符 下一步:您需要确定将使用哪种语言。您可以: /^(s)/仅选择第一个“s” /(?:[^s])(?:(s)[^s]*)+选择所有其他“s”。请注意,将跳过第一个字符(独立于); 解释:忽略第一个字符重复

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

单词中的任何s都应转换为5。

您可以执行以下操作:

  • /^(s)/
    仅选择第一个“s”
  • /(?:[^s])(?:(s)[^s]*)+
    选择所有其他“s”。请注意,将跳过第一个字符(独立于);
    • 解释:
      忽略第一个字符
      重复一个或多个:获取“s”并忽略其他非“s”的字符
下一步:您需要确定将使用哪种语言。

您可以:

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

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

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

/\bs\w/

(正如@Matthew指出的,
\w
确实是多余的:)

一旦你在一个单词的开头替换了所有的
s
,那么剩下的就在这个单词里面了(我假设你也想用
5
替换单词末尾的
s
),这样你就可以简单地使用

/s/

为了完整起见,这里介绍了如何将其组合在一起(我假设使用JavaScript):


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

/\bs\w/

(正如@Matthew指出的,
\w
确实是多余的:)

一旦你在一个单词的开头替换了所有的
s
,那么剩下的就在这个单词里面了(我假设你也想用
5
替换单词末尾的
s
),这样你就可以简单地使用

/s/

为了完整起见,这里介绍了如何将其组合在一起(我假设使用JavaScript):


根据语言的不同,可以用一个正则表达式捕获替换并按程序替换它们。下面是一个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;

根据语言的不同,可以用一个正则表达式捕获替换并按程序替换它们。下面是一个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;


@David您的第二个示例需要一个量词(
+
),否则它将仅选择位于第二位置的s。
/^(s)/
将仅选择输入开头的
s
,而不是单词的开头。@David
.s
仍将匹配's',并命中第一个字符(如果尚未替换),所以在我看来,这仍然是错误的。@Matt问题是,不存在这样的例子。我不知道@Coffee想要什么。@David空格也是
^s
,所以…:D@David您的第二个示例需要一个量词(
+
),否则它将只选择位于第二个位置的s。
/^(s)/
将只选择输入开头的
s
,而不是单词的开头。@David
.s
仍将匹配's',并命中第一个字符(如果它尚未被替换),所以在我看来,这仍然是错误的。@Matt问题是,不存在这样的例子。我不知道@Coffee想要什么。@David空格也是
^s
,所以…:我知道我会后悔问这个问题,但是“为什么?”你可以做两次,第一次用“$”替换“s”(空格-s),第二次用“5”替换“s”…@Cephron你可能是说
/\bs/
表示分词,而不是空格。空格-s与输入的开头不匹配。@Mitch 2 l33t3n up h1z$a55ine55。我知道我会后悔问这个问题,但是“为什么?”你可以做两次,第一次用“$”替换“s”(空格-s),第二次用“5”替换“s”。@Cephron你可能是说
/\bs/
表示断字,而不是空格。空格-s与输入的开头不匹配。@Mitch 2 l33t3n up h1z$a55ine55。为什么要使用
\w
?如果“单词”只是
“s”
,那该怎么办?这是一个正确的观点。我可以用
\B
来代替,但是一个1个字符的单词是OP没有指定的一种特殊情况。我的问题是“为什么要麻烦指定某些东西必须跟在首字母
s
后面呢?对于你的例子,我们关心的只是替换首字母“s”,是吗?为什么要使用
\w
?如果“单词”只是
”s呢“
?这是一个正确的观点。我可以用
\B
来代替,但是1个字符的单词是OP没有指定的一种特殊情况。我的问题是“为什么要麻烦指定某些东西必须跟在首字母
s
后面呢?对于你的例子,我们关心的只是替换首字母“s”,是吗?