Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 - Fatal编程技术网

Regex 正则表达式匹配行,带特殊字符的单词除外

Regex 正则表达式匹配行,带特殊字符的单词除外,regex,Regex,我试图从apt cache dependens输出中获取包依赖项,并尝试删除“dependens:”、“recommendes:”、“summendes:” 您的“仅限grep”要求很奇怪,而且会弄巧成拙,但既然您坚持:如果我们可以假设包的名称中没有空格,那么这样就可以: apt-cache depends gdebi | head -n +2 | grep -o '\S\+$' -o标志使grep只打印匹配行的部分 原始答案 对于标准unix工具来说,这是一项很好的任务: sed代码分为两

我试图从
apt cache dependens
输出中获取包依赖项,并尝试删除“dependens:”、“recommendes:”、“summendes:”

您的“仅限grep”要求很奇怪,而且会弄巧成拙,但既然您坚持:如果我们可以假设包的名称中没有空格,那么这样就可以:

apt-cache depends gdebi | head -n +2 | grep -o '\S\+$'
-o
标志使grep只打印匹配行的部分

原始答案 对于标准unix工具来说,这是一项很好的任务:

sed代码分为两部分:

  • 1d
    删除第一行
  • s/^+((取决于|推荐|建议):)?//
    将前两个斜杠之间与正则表达式匹配的任何文本替换为后两个斜杠之间的文本(在本例中为空字符串)
  • -r
    标志告诉我们正在使用sed,这意味着我们不必用反斜杠转义特殊字符(在本例中,
    +


    您可以将此正则表达式与多行标志一起使用:

    查找:

    替换:

    $2
    
    演示:

    正则表达式:

    ^(\s*(?:(?:建议)|(?:建议)|(?:取决)):)?
    查看此模式的行首0次或1次,并捕获为组1

    \s*
    在第一个模式后使用空格


    (.*)$
    选择第一个模式之后直到行尾的所有内容并捕获为第2组。

    您使用这个正则表达式的程序是什么?我使用grep-p正则表达式。但与perl相比,javascript等其他语言的正则表达式模式非常相似,所以我认为语言不会成为问题。如果我错了,请纠正我。我希望使用universal regex,这样我才能更好地理解我错过的内容。@AlvinPutra没有“universal regex”这样的东西,但sed是一个标准的unix工具,上面的用法与grep一样。我已经编辑了我的答案,以包含更多的上下文。随着unix工具的发展,sed几乎是“通用”的。对不起,我指的是PHP、Javascript和grep Perl,它们具有几乎相同的特殊字符,比如它们具有相同的'\w',或者具有类似于'x(?=y')的前瞻性。我只使用grep-P编辑了更具体的问题。在我编辑问题之前,您的sed代码已经回答了我的问题,所以我想我应该标记您的答案。谢谢另外,我刚刚通过使用regex找到了解决方案<代码>apt缓存依赖于gdebi | grep-Po'(?)?
    apt-cache depends gdebi | head -n +2 | grep -o '\S\+$'
    
    apt-cache depends gdebi | sed -re '1d; s/^ +((Depends|Recommends|Suggests): )?//'
    
    ^(\s*((Suggests)|(Recommends)|(Depends)):)?\s*(.*)$
    
    $2