我知道可以匹配一个单词,然后用其他工具逆转比赛(例如 grep -v)。但是,可以匹配不包含一个特定的单词,例如 hede,使用常规表达式的线条吗?

入口:

hoho
hihi
haha
hede

代码:

grep "<Regex for 'doesn't contain hede'>" input

所需的产量:

hoho
hihi
haha

当前回答

下面的功能将帮助您获得所需的产量

<?PHP
      function removePrepositions($text){

            $propositions=array('/\bfor\b/i','/\bthe\b/i'); 

            if( count($propositions) > 0 ) {
                foreach($propositions as $exceptionPhrase) {
                    $text = preg_replace($exceptionPhrase, '', trim($text));

                }
            $retval = trim($text);

            }
        return $retval;
    }


?>

其他回答

只要你正在处理线路,只需标记负面比赛,并瞄准其余。

事实上,我用这个技巧与 sed 因为 ^(?!hede)*$ 看起来不受它支持。

对于所需的产量

标记负面相匹配:(例如,线与目标),使用一个字符不包含在整个文本,一个 emoji 可能是一个很好的选择为此目的。 s/(*hede)/\1/g 目标其余(未标记的线:例如,线与目标无目标)。 假设你只想保持目标并删除其余(如你想要): s/^。

为了更好的理解

假设你想删除目标:

使用 ConyEdit,您可以使用命令行 cc.gl!/hede/ 获取不包含 regex 匹配的行,或者使用命令行 cc.dl /hede/ 删除包含 regex 匹配的行。

我想添加另一个例子,如果你试图匹配一个包含X线的整个线,但也不包含Y线。

这个 regex 模式会工作(在 JavaScript 中也工作)

^(?=.*?tasty-treats)((?!chocolate).)*$

(全球,多线旗在例子中)

互动示例: https://regexr.com/53gv4

比赛

(这些 URL 包含“蛋糕治疗”并且不包含“巧克力”)

example.com/tasty-treats/strawberry-ice-cream example.com/甜点/tasty-treats/banana-pudding example.com/tasty-treats-overview

没有匹配

example.com/tasty-treats/chocolate-cake example.com/home-cooking/over-roasted-chicken example.com/tasty-treats/banana-chocolate-fudge example.com/desserts/chocolate/tasty-treats example.com/chocolate/tasty-treats/desserts

^hede$(*SKIP)(*F)|^.*$

这将完全滑动包含准确的线条的线条,并匹配所有剩下的线条。

演示

符号前的部分. 符号不应匹配. ^hede$(*SKIP)(*F) 符号后的部分. 符号应匹配。

第一部分

^hede$(*SKIP)(*F)

解释:

因此,包含字符串的线条将被匹配. 一旦雷格斯发动机看到以下 (*SKIP)(*F)(注:你可以写 (*F)作为 (*FAIL))字符,它滑动并使匹配失败。

第2部分

^.*$

解释:

OP 没有指定或标记帖子,以显示背景(编程语言、编辑器、工具)中将使用 Regex。

对于我来说,有时我需要在使用 Textpad 编辑文件时做到这一点。

Textpad 支持一些 Regex,但不支持 lookahead 或 lookbehind,所以需要几步。

    Search string:^(.)  
    Replace string:<@#-unique-#@>\1  
    Replace-all  

    Search string:<@#-unique-#@>.*hede.*\n  
    Replace string:<nothing>  
    Replace-all  

此分類上一篇

此分類上一篇

    Search string:<@#-unique-#@>
    Replace string:<nothing>  
    Replace-all  

现在你有原始文本,所有包含字符串的线条已被删除。


此分類上一篇

    Search string:^(.)  
    Replace string:<@#-unique-#@>\1  
    Replace-all  

对于包含字符串标签的所有行,请删除独特的“标签”:

    Search string:<@#-unique-#@>(.*hede)
    Replace string:\1  
    Replace-all  

此分類上一篇

此时此刻,所有以独特的“标签”开始的线条,不包含线条标签,我现在只能用这些线条来做我的某事。

当我完成时,我将从所有行中删除独特的“标签”(替换行是空的):

    Search string:<@#-unique-#@>
    Replace string:<nothing>  
    Replace-all