【问题标题】:regex replace spaces between dollar signs正则表达式替换美元符号之间的空格
【发布时间】:2016-02-05 16:20:55
【问题描述】:

如何替换两个美元符号之间的空格?

使用这个正则表达式一切正常,我可以删除 R 和 R 之间的空格。

\s(?![^\R]*(\R|$)) the result

但是当我使用美元符号而不是 R 时,它不起作用。也许美元符号有一些特殊的方式。

\s(?![^\$]*(\$|$)) result with dollar sign

编辑:编程语言:PHP

【问题讨论】:

  • 如果字符串中只能出现一对美元,你可以试试\s+(?=[^$]*\$[^$]*$)like this。否则,您需要通过 like this regex \s+(?!(?:(?:[^$]*\$){2})*[^$]*$) 来检查所有字符串是否在平衡的美元符号内
  • 我真的很想见见这个人,他在没有阅读完整问题的情况下对所有正则表达式问题投了反对票。我明白,这是我在这里的第一天,但​​这并不意味着我不知道如何使用这个平台。我在这里大约 6 年.. 这真的没有根据!
  • 谢谢泡泡,完美!
  • 输入很长,这种方法效率不高。我建议使用简单的\$[^$]+\$ 并替换 match evauator/lamda 表达式中的空格,以及您的编程语言提供的所有类似方法。
  • 顺便说一句,在 PCRE 和 Boost 中,\R 表示换行序列。它适用于什么语言?正如regex tag info 所述,所有带有此标签的问题还应包含一个标签,指定适用的编程语言或工具。

标签: regex replace spaces


【解决方案1】:

其中一个 cmets 中建议的 \s+(?!(?:(?:[^$]*\$){2})*[^$]*$) 模式涉及大量回溯,但效率极低,甚至可能导致程序冻结。

这是我在 PHP 中的做法(用连字符替换 $ 符号之间的空格):

$re = '~\$[^$]+\$~'; 
$str = "\$ words words \$ \$ words words \$ \$ words words \$ \$ words words \$"; 
$result = preg_replace_callback($re, function($m) {
    return str_replace(" ", "-", $m[0]);
}, $str);
echo $result;

IDEONE demo

使用\$[^$]+\$ 模式,我们匹配两个美元符号之间的整个子字符串,在preg_replace_callback 内,我们可以通过将str_replace 应用于所有匹配项来进一步操作替换。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
相关资源
最近更新 更多