PHP - 在文本文件中查找字符串

时间:2016-01-08 20:47:56

标签: php regex preg-match

我有这个代码index.php:

named.txt

zone "site.com" { zone "site2.com" { zone "site3.com" { 文件内容内容为:

site1.com
site2.com
site3.com

我需要在浏览器中输出一个排序的输出:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2 个答案:

答案 0 :(得分:0)

$domsws是一个二维数组。第一个维度用于整个正则表达式匹配和每个捕获组,第二个维度用于每个匹配(您可以使用PREG_SET_ORDER标志将其反转)。由于站点名称位于捕获组1中,因此它们位于$domsws[1]中,这是所有这些捕获组匹配的数组。所以你应该这样做:

此外,$d00m是一个字符串,而不是一个数组,所以你不需要循环它。

$d00m = file_get_contents('named.txt');
preg_match_all('#zone "(.*)"#', $d00m, $domsws);
$site = $domsws[1];
print_r($site);

答案 1 :(得分:0)

使用file代替file_get_contents。这将为您提供一个数组,其中每一行都是数组的一个项。没有弄乱explode

$d00m = file('named.txt');

然后遍历它们并执行preg_replace将值存储到新数组中。然后,您可以使用sortnatsort对该数组进行排序。我个人会使用后者。

以下是您可以使用的一些代码:

<?php


// CREATE A NEW ARRAY TO HOLD OUR OUTPUT
$site_list = array();


// IMPORT THE FILE INTO AN ARRAY
$d00m = file('named.txt');


// LOOP THROUGH THE ARRAY AND STORE THE SITE NAME INTO THE ARRAY
foreach ($d00m as $dom) {

    $site_list[] = preg_replace('~zone "(.*?)" \{~', '$1', $dom);

}


// DO A NATURAL SORT OF THE NUMBERS
natsort($site_list);


// DUMP OUT THE DATA
print_r($site_list);

使用preg_replace提供了一种方法来保留您想要的部分$1并丢弃其他所有内容。 $1包含括号内捕获的内容。 (.*?)表示抓取任何字符.,任意次*,直到您点击表达式?的下一部分。在这种情况下,一旦达到结束引号,它就会停止。

以下是一个例子。

使用named.txt这样的文件:

zone "site.com" {
zone "site2.com" {
zone "site3.com" {
zone "site16.com" {
zone "site4.com" {
zone "site77.com" {
zone "site34.com" {
zone "site5.com" {
zone "site999.com" {
zone "site34.com" {
zone "site11.com" {
zone "site8.com" {
zone "site64.com" {

你会得到这样的结果:

Array
(
    [0] => site.com

    [1] => site2.com

    [2] => site3.com

    [4] => site4.com

    [7] => site5.com

    [11] => site8.com

    [10] => site11.com

    [3] => site16.com

    [9] => site34.com

    [6] => site34.com

    [12] => site64.com

    [5] => site77.com

    [8] => site999.com

)