Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用简单的搜索/替换正则表达式在点和字符之间插入空格_Regex_Replace - Fatal编程技术网

Regex 使用简单的搜索/替换正则表达式在点和字符之间插入空格

Regex 使用简单的搜索/替换正则表达式在点和字符之间插入空格,regex,replace,Regex,Replace,我想通过在每个句点和字母之间插入空格来分隔句子,但不要在点和括号或点和逗号之间插入空格 考虑这一点: 这是一段文字。文字之间有一些点。(多可爱啊)。 这可能在Perl或PHP中有一些解决方案,但我感兴趣的是,它可以在支持基于正则表达式的搜索/替换的文本编辑器中完成吗?问题是,它将匹配点和字符,替换将完全删除这两个字符。换句话说,这两个字符之间是否有匹配“nothing”的方法?未指明语言,我使用了PHP,但表达式非常通用,可以在其他环境中重用: <?php $s = 'This is

我想通过在每个句点和字母之间插入空格来分隔句子,但不要在点和括号或点和逗号之间插入空格

考虑这一点:

这是一段文字。文字之间有一些点。(多可爱啊)。

这可能在Perl或PHP中有一些解决方案,但我感兴趣的是,它可以在支持基于正则表达式的搜索/替换的文本编辑器中完成吗?问题是,它将匹配点和字符,替换将完全删除这两个字符。换句话说,这两个字符之间是否有匹配“nothing”的方法?

未指明语言,我使用了PHP,但表达式非常通用,可以在其他环境中重用:

<?php

$s = 'This is a text.With some dots.Between words.(how lovely).';
$r = '~(\w)(\.)(\w)~';

echo preg_replace($r, '$1 $3', $s);
  • (\w)正好匹配点前面的一个字母数字字符
  • (.)匹配点
  • (\w)正好匹配点后的一个字母数字字符
  • 在替换字符串中,第一个和第三个匹配项在Perl中被称为$1和$3:

    $msg =~ s/\.([a-zA-Z])/\. \1/g
    
    在vim中(整个文件):

    在VisualStudio中,它将是

    \.([a-zA-Z])
    
    在“查找内容:”中,以及

    在“替换为:”


    一般来说,大多数支持正则表达式搜索的编辑器通常都有捕获组,允许您存储匹配的表达式的一部分,并在替换文本中使用它。在上面的表达式中,
    ()
    中的所有内容都是“捕获”的,我将其包含在
    \1

    中,这段代码解决了您的问题:

    preg_replace('/([a-zA-Z]{1})\.([a-zA-Z]{1})/', '$1. $2', 'This is a text.With some dots.Between words.(how lovely).');
    

    您应该检测dot前后的任何字符,并用blanco替换。

    您可以在替换字符串中使用反向引用。通常它看起来像:

    搜索正则表达式:

    (\.)(\w)
    
    替换模式(注意空格):

    反向引用是对应组的替代

    或者,您可以使用lookarounds:

    (?<=\.)(?=\w)
    

    (?来自OP:“这可能在Perl或PHP中有一些解决方案,但我感兴趣的是,它可以在支持基于正则表达式的搜索/替换的文本编辑器中完成吗?”@Cyborgx37是的,我在text mate中测试了它,其中搜索模式与(\w)(\)(\w)完全相同替换模式,比如$1$3,我不知道TextMate支持替换模式($1$3…),这很好。从OP中可以看出:“这可能有一些Perl或PHP的解决方案,但我感兴趣的是,它可以在支持基于正则表达式的搜索/替换的文本编辑器中完成吗?”我认为你提到PHP和Perl让人感到困惑。你想要用这些语言的解决方案,还是在某个特定的文本编辑器中寻找解决方案?是的,很抱歉没有完全弄清楚这一点-我特别试图阻止使用PHP或Perl的解决方案,因为这些解决方案最终会有变量/替换字符串,而我我希望严格在文本编辑器中完成它。是的,这正是我想要的。所以它被称为“lookarounds”-现在我知道了。顺便说一句,它在TextMate中工作得非常好。谢谢你的这一课。这对于javascript来说也是完美的,只需稍加修改
    
    preg_replace('/([a-zA-Z]{1})\.([a-zA-Z]{1})/', '$1. $2', 'This is a text.With some dots.Between words.(how lovely).');
    
    (\.)(\w)
    
    $1 $2
    
    (?<=\.)(?=\w)