删除新闻文件中的重复数据

时间:2013-10-24 05:13:25

标签: php regex

我们有以下格式的新闻发布数据。 \t是一个实际的制表符。

Headline\tDate\tNews

问题是过去有一些像重复或额外字段这样的问题..

Government Shutdown Latest News {null}{10/15/2013}  {10/15/2013}    words words words.
Email Flow in Exchange  {null}{10/17/2013}  {10/17/2013}    words words words....
Should This be banned?  {null}{10/23/2013}  {10/23/2013}    words words words....

我需要移除第一个括号字段{null}第三个重复字段以及第三个字段后面的制表符即可。

所以最初这些数据的每一行都应该是这样的。

Government Shutdown Latest News    {10/15/2013}    words words words....
Email Flow in Exchange    {10/17/2013}    {10/17/2013}    words words words....
Should This be banned?    {10/23/2013}    {10/23/2013}    words words words....

我在删除这两个字段和标签时遇到了问题。它与所有人都匹配。

preg_replace('/\{.*?\}(?={)|\{.*?\}\t/', '', $text);

2 个答案:

答案 0 :(得分:3)

您可以为作业使用负面反对

(?<![^\s]){[^}]*}\t?

正则表达式:

(?<!           look behind to see if there is not:
 [^\s]         any character except: whitespace (\n, \r, \t, \f, and " ")
)              end of look-behind
{              '{'
 [^}]*         any character except: '}' (0 or more times)
}              '}'
\t?            '\t' (tab) (optional)

注意:您可以在不转义{ }的情况下执行此操作。

请参阅working demo以及regex101 demo

答案 1 :(得分:2)

你可以尝试这种模式:

$result = preg_replace('~[^\s}]\s*\K{null}|{[0-9]{2}/[0-9]{2}/[0-9]{4}}\t(?!\s*[^{])~', '', $text);