2016-12-07 37 views
1

我有這樣一羣Nginx的虛擬主機文件:grep命令在一個文件中的特定模式,並停止在第一場比賽

# This file was autogenerated by Puppet [ wordpress::vhost ] 
# Any manual edit to this file will be automatically removed 
# ©2016, DevOps team 

server { 
    listen 443 ssl; 

    root /var/www/as888; 
    index index.php; 

    server_name wptraining-sdemo.mysysweb.com; 
    ...... 
    ...... 

,我需要提取server_name指令(在IE wptraining-sdemo.mysysweb.com值這種情況下)從每個文件。我想這一點,使用preg_replace

$host_dir = '/etc/nginx/sites-enabled'; 
$_pattern = '/^.*server_name (.*);$/U'; 

$_clients = scandir($host_dir); 
foreach ($_clients as &$client) { 
    if (preg_match('/^as[0-9]{3}$/', $client, $matchs)) { 
     $wp_domain = preg_replace($_pattern, "$1", file("{$host_dir}/{$matchs[0]}")); 
     echo "{$matchs[0]} => {$wp_domain[0]}"; 
    } 
} 

,我得到的回報的文件非常一號線:

as888 => # This file was autogenerated by Puppet [ wordpress::vhost ] 

如果我使用preg_grep代替:

$wp_domain = preg_grep($_pattern, file("{$host_dir}/{$matchs[0]}")); 
print_r($wp_domain); 

我得到的東西像這樣:

Array 
(
    [10] =>  server_name wptraining-sdemo.mysysweb.com; 

) 

這對我來說很奇怪,因爲我期待[0](因爲那裏只會有一場比賽)而不是[10]。看起來它正在用文件中的每一行創建一個數組。

我做錯了什麼?最重要的是,我錯過了什麼?我對PHP並不熟悉,並且對此感到迷茫。網絡上沒有可用的幫助/帖子。基本上,類似於這個:sed -n -e 's|^.*server_name \(.*\);$|\1|p' <file_name>,我相信。 任何幫助將不勝感激。最好!

+0

的端'preg_grep'不重置指數,其與從原始數組的索引和值返回的確切項目。 –

+0

'preg_grep'只是一個測試,看看實際上正在被grepped。我的實際目標是提取'server_name'和尾部';'之間的字符串。儘管感謝解決'preg_grep'的神祕。 – MacUsers

+0

太棒了,那你爲什麼不按照你的要求去做呢? 'preg_match('〜server_name \ h *(。*);〜',$ s,$ match); echo $ match [1];'?實際上,我認爲如果你添加'm'修飾符,你的方法就可以工作:'$ _pattern ='/^.*server_name(。*); $/m';' - 參見[this demo](https:// regex101。 COM/R/dsTF5T/1)。 –

回答

1

您可以使用

preg_match('~server_name\h*(.*);~', $s, $match); 
echo $match[1]; 

看到這個regex demo

詳細

  • server_name - 文字串
  • \h* - 0+水平空格
  • (.*) - 第1組:比換行符字符
  • ;其他任何0+字符 - 一個;

其實,我認爲,如果你加入M修改你的方法將工作:

$_pattern = '/^.*server_name (.*);$/m'; 

this demo

*詳細**:

  • ^.* - 開始一行然後任何0+字符以外的換行符字符
  • server_name - 文字串
  • - 空間
  • (.*) - 第1組:比換行符字符
  • ;其他任何0+字符 - 一個;
  • $ - 線
相關問題