2013-10-29 50 views
-3

我是一个总的初学者正则表达式,这样我就不知道如何构建它的过滤器。我基本上想要做的是:preg_replace替换其中IP

我有一个.txt文件,IP和unix时间戳,例如11.11.11.11:1393598(IP:timestamp),我想用正则表达式替换关联的时间戳与一个特定的IP,所以如果有3个IP和文本文件中的时间戳(用空格隔开),我只想用IP 11.11.11.11 (11.11.11.11:343434 to 11.11.11.11:999999)来替换那个,现在我对整个正则表达式事物是全新的,所以我真的不知道该怎么办做,所以我没有代码,我曾尝试:/

任何帮助,非常感谢!

+1

如果您是刚接触正则表达式并且尚未能够尝试任何代码,那么Stack Overflow不是您的问题的正确场所,因为这是一个太广泛的话题。你应该先做一些阅读和学习,然后尝试一些代码,然后如果你无法得到它,请在Stack Overflow上发布一个关于你的具体问题的问题。 – ajp15243

+0

我一直在看教程和约2小时现在,它仍然看起来像我的古埃及。我希望一个好的灵魂能够帮助我解决这个单一的问题,因为我并不是真的想读3本书并去学校一年才解决这个可能需要20秒才能解决的问题已经经历了学习所有要解决的麻烦。 –

+0

并缩小我的问题我想要替换“11.11.11.11:999999”的每个实例为“11.11.11.11:222222” –

回答

2
$string = '11.11.11.11:1393598'; 
$search = preg_quote('11.11.11.11'); 
$replace = '999999'; 
$string = preg_replace("/($search):\d+/", "$1:$replace", $string); 
1

未经测试,我不太了解php。

# $str = preg_replace_callback('/(11(?:\.11){3}:)(?:(343434)|(999999))/', 
#    function($matches){ 
#     $repl = "999999"; 
#     if ($matches[3] != "") { 
#      $repl = "222222"; 
#     } 
#     return $matches[1] . $repl; 
#    }, 
#    $str); 
# 
# 

# (11(?:\.11){3}:)(?:(343434)|(999999)) 

(         # (1 start) 
     11 
     (?: \.11){3} 
     : 
)         # (1 end) 
(?: 
     (343434)     # (2) 
    | (999999)     # (3) 
)