Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.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_Regex Lookarounds_Gsub - Fatal编程技术网

Regex 在前面有某个单词且没有空格分隔的每个单词中匹配某个字符的所有实例

Regex 在前面有某个单词且没有空格分隔的每个单词中匹配某个字符的所有实例,regex,regex-lookarounds,gsub,Regex,Regex Lookarounds,Gsub,给定如下字符串: 你好。布拉。字 我想构造一个正则表达式,它将匹配前面有“word”和任何其他非空格字符的所有“.” 所以,在上面的例子中,我希望第一个、第二个和最后一个点是匹配的 虽然使用全局标志(/(?:word.*)\K./gU)匹配第一个点和最后一个点很容易,但我不确定如何构造一个也匹配第二个点的正则表达式 欣赏任何指针。您可以匹配word,然后使用\G锚获得所有连续匹配,不包括匹配的空格字符或点 (?:\bword|\G(?!\A))[^.\s]*\K\. 部分地 (?:非捕获组

给定如下字符串:

你好。布拉。字

我想构造一个正则表达式,它将匹配前面有“word”和任何其他非空格字符的所有“.”

所以,在上面的例子中,我希望第一个、第二个和最后一个点是匹配的

虽然使用全局标志(/(?:word.*)\K./gU)匹配第一个点和最后一个点很容易,但我不确定如何构造一个也匹配第二个点的正则表达式

欣赏任何指针。

您可以匹配word,然后使用
\G
锚获得所有连续匹配,不包括匹配的空格字符或点

(?:\bword|\G(?!\A))[^.\s]*\K\.
部分地

  • (?:
    非捕获组
    • \b单词
      匹配前面有单词边界的
      单词
    • |
    • \G(?!\A)
      在上一个匹配的末尾而不是开始处断言位置
  • 关闭非捕获组
  • [^.\s]*
    匹配除
    或空白字符以外的任何字符的0+次出现次数
  • \K
    清除匹配缓冲区(暂时忘记匹配的内容)
  • \。
    匹配一个点

什么是工具或语言?我正在尝试使用ruby中的gsub,用点替换DasheTool。谢谢,这确实很有效,将其标记为可接受的答案,但点不应该被漏掉吗?(即在[^.\s]@rmadhwal中,
\G
锚点在两个位置匹配,在字符串的开头或上一个匹配的结尾。使用
(?!\A)
会阻止字符串开头的匹配,因为它应该在单词之后匹配。character类中的点不需要是escape。只需在我键入后阅读\G的工作原理,然后将其编辑掉即可!谢谢你的帮助,非常感谢!事后看来,[^.\s]*位确实非常聪明,是道具