我有这个代码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)"
答案 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将值存储到新数组中。然后,您可以使用sort
或natsort
对该数组进行排序。我个人会使用后者。
以下是您可以使用的一些代码:
<?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
)