我已经花了几个小时在脑子里绞尽脑汁而且我的智慧结束了。我开始认为这对正则表达式来说是不可能的。
我见过的最接近的是这篇文章:Regular expression to match a line that doesn't contain a word?,但是当我用数字代替“hede”时解决方案不起作用。
我想选择不包含的每个行: 377681 ,以便我可以将其删除。
^((?!377681).)*$
...不起作用,以及我发现或完成的数千个其他示例/调整。
这可能吗?
答案 0 :(得分:2)
grep -v 377681 input_file
会解决您的问题吗?
答案 1 :(得分:2)
试试这个
^(?!.*377681).+$
这里重要的是使用m
(多线)修饰符,以便^
匹配行的开头,$
匹配行的结尾,否则它将不起作用
(注意:我认识到我的正则表达式与你的正则表达方式相同。)
答案 2 :(得分:0)
这可能是一种更好的方法,例如迭代每一行并要求构建String
方法,例如indexOf
或contains
,具体取决于您使用的语言
你能给我们一个完整的例子吗?
答案 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);
?>