正则表达式查找和替换:删除除“#”开头的所有内容?

时间:2014-11-15 10:22:17

标签: regex keyboard-maestro

我是正则表达式的新手,无法轻易找到方法。我想删除所有不以#开头的单词,并在它们之间添加逗号,例如,如果我有:

Cookie Recipe for n00bs
#cookie #recipe #chocolate To do this you have to etc...
Bla bla bla mumbo jumbo

我想得到结果:

cookie, recipe, chocolate

如果你能帮助我,那就太棒了,谢谢,祝你有个美好的一天!

2 个答案:

答案 0 :(得分:0)

您错过了告诉您正在使用的编程语言。这里有一个PHP示例,它使用perl兼容的正则表达式:

$text = <<<EOF
Cookie Recipe for n00bs
#cookie #recipe #chocolate To do this you have to etc...
Bla bla bla mumbo jumbo
EOF;

$pattern = '/((?<=#)\w+)/';
preg_match_all($pattern, $text, $matches);

echo implode(', ', $matches[0]);

我正在使用一个所谓的正面后瞻断言(?<=#),它确保只匹配前面有#的单词但是,这很重要,它不包括{{1本身进入比赛。在lookbehind表达式之后,我尽可能多地匹配单词字符#

之后\w用于将结果匹配与implode()连接起来。正则表达式不能用于该部分工作。

您可以在Regex101.com

查看此正则表达式的工作原理

答案 1 :(得分:0)

试试这个:

$re = "/#\\w+/";
$str = "#cookie #recipe #chocolate To do this you have to etc...";
$str .= "#cookie #recipe #chocolate To do this you have to etc...";

preg_match_all($re, $str, $matches);
$r=@implode(", ",@$matches[0]);  // for adding comma(,) and space( ).
var_dump( $matches,$r);

<强>输出:

array (size=1)
  0 => 
    array (size=6)
      0 => string '#cookie' (length=7)
      1 => string '#recipe' (length=7)
      2 => string '#chocolate' (length=10)
      3 => string '#cookie' (length=7)
      4 => string '#recipe' (length=7)
      5 => string '#chocolate' (length=10)

string '#cookie, #recipe, #chocolate, #cookie, #recipe, #chocolate' (length=58)

live demo