正则表达式:Line不包含数字

时间:2011-07-29 21:33:36

标签: regex

我已经花了几个小时在脑子里绞尽脑汁而且我的智慧结束了。我开始认为这对正则表达式来说是不可能的。

我见过的最接近的是这篇文章:Regular expression to match a line that doesn't contain a word?,但是当我用数字代替“hede”时解决方案不起作用。

我想选择不包含的每个 377681 ,以便我可以将其删除。

^((?!377681).)*$ 

...不起作用,以及我发现或完成的数千个其他示例/调整。

这可能吗?

5 个答案:

答案 0 :(得分:2)

grep -v 377681 input_file会解决您的问题吗?

答案 1 :(得分:2)

试试这个

^(?!.*377681).+$

here on Regexr

这里重要的是使用m(多线)修饰符,以便^匹配行的开头,$匹配行的结尾,否则它将不起作用

(注意:我认识到我的正则表达式与你的正则表达方式相同。)

答案 2 :(得分:0)

这可能是一种更好的方法,例如迭代每一行并要求构建String方法,例如indexOfcontains,具体取决于您使用的语言

你能给我们一个完整的例子吗?

答案 3 :(得分:0)

您需要为m^启用$(多行)标记,以分别匹配行的开头和结尾。如果不这样做,^将匹配输入开始,而$只会匹配输入结束。

以下演示:

#!/usr/bin/env php
<?php
$text = 'foo 377681 bar
this can be 3768 removed
377681 more text
remove me';

echo preg_replace('/^((?!377681).)*$/m', '---------', $text);
?>

将打印:

foo 377681 bar
---------
377681 more text
---------

答案 4 :(得分:0)

<?php
$lines = array(
'434343343776815456565464',
'434343343774815456565464',
'434343343776815456565464'
);

foreach($lines as $key => $value){
    if(!preg_match('#(377681)#is', $value)){
        unset($lines[$key]);
    }   
}

print_r($lines);

?>