PHP сравнивает несколько строк

#php

#php

Вопрос:

У меня много ссылок:

 http://exmpale.com/abc/exmpale.html
http://exmpale.com/abc/exmpale1.html
http://exmpale.com/abc/exmpale2.html
http://exmpale.com/abc/exmpale/exmpale1.html
http://exmpale.com/abc/exmpale/exmpale2.html
http://exmpale.com/abc/exmpale/exmpale3.html
http://exmpale.com/abcd/exmpale1.html
http://exmpale.com/abcd/exmpale2.html
http://exmpale.com/abcd/exmpale2.html
http://exmpale.com/abcd/exmpale4.html
http://exmpale.com/abc/abc/exmpale1.html
http://exmpale.com/abc/abc/exmpale2.html
http://exmpale.com/abc/abc/exmpale3.html
http://exmpale.com/abc/abc/exmpale4.html
http://exmpale.com/abc/abc/exmpale5.html
 

Я использую php, я хочу получить все ссылки, которые нравятся http://exmpale.com/abc/(*).html , и перечислить их в массиве.
Извините, я забыл код. мой код

 $a = array(
    0 => 'http://exmpale.com/abc/exmpale.html',
    1 => 'http://exmpale.com/abc/exmpale1.html',
    2 => 'http://exmpale.com/abc/exmpale2.html',
    3 => 'http://exmpale.com/abc/exmpale/exmpale1.html',
    4 => 'http://exmpale.com/abc/exmpale/exmpale2.html',
    5 => 'http://exmpale.com/abc/exmpale/exmpale3.html',
    6 => 'http://exmpale.com/abcd/exmpale1.html',
    7 => 'http://exmpale.com/abcd/exmpale2.html',
    8 => 'http://exmpale.com/abcd/exmpale2.html',
    9 => 'http://exmpale.com/abcd/exmpale4.html',
    10 => 'http://exmpale.com/abc/abc/exmpale1.html',
    11 => 'http://exmpale.com/abc/abc/exmpale2.html',
    12 => 'http://exmpale.com/abc/abc/exmpale3.html',
    13 => 'http://exmpale.com/abc/abc/exmpale4.html',
    14 => 'http://exmpale.com/abc/abc/exmpale5.html',
);

foreach($a as $k => $v ){
    $abc = preg_match_all('/http://exmpale.com/abc/(.*?).html/',$v,$b);  
    print_r($b[1]);
}
 

и я хочу получить результат.

 $result = array(
  'http://exmpale.com/abc/exmpale.html',
  'http://exmpale.com/abc/exmpale1.html',
  'http://exmpale.com/abc/exmpale2.html');
 

но это заняло весь результат, пожалуйста, помогите мне
, спасибо вам.

Комментарии:

1. Я предлагаю вам взглянуть на циклы и функции подстроки. Начните изучать документацию, начните использовать Google для этого. Затем запустите свой собственный скрипт, попробуйте решить это самостоятельно. Затем , если вы столкнулись с конкретной проблемой с вашим собственным кодом, тогда самое время задать вопрос здесь и опубликовать свой код внутри вопроса. Мы здесь не для того, чтобы делать вашу работу за вас. Мы здесь, чтобы помочь вам с выполнением вашей работы.

2. извините, я не знаю свой код

Ответ №1:

Просто используйте функцию php preg_match_all, и соответствующая строка будет загружена в массив, который вы предоставляете вышеупомянутой функции в качестве аргумента. Пожалуйста, прочитайте руководство по PHP на preg_match_all и создайте регулярное выражение для ваших нужд. Вы можете проверить свое регулярное выражение здесь

Комментарии:

1. я использую функцию preg_match_all, но результат не нравится

Ответ №2:

Поскольку вы не указываете, в какой структуре данных хранятся URL-адреса, я предполагаю, что это необработанная строка:

 $data_raw = "http://exmpale.com/abc/exmpale.html
http://exmpale.com/abc/exmpale1.html
http://exmpale.com/abc/exmpale2.html
http://exmpale.com/abc/exmpale/exmpale1.html
http://exmpale.com/abc/exmpale/exmpale2.html
http://exmpale.com/abc/exmpale/exmpale3.html
http://exmpale.com/abcd/exmpale1.html
http://exmpale.com/abcd/exmpale2.html
http://exmpale.com/abcd/exmpale2.html
http://exmpale.com/abcd/exmpale4.html
http://exmpale.com/abc/abc/exmpale1.html
http://exmpale.com/abc/abc/exmpale2.html
http://exmpale.com/abc/abc/exmpale3.html
http://exmpale.com/abc/abc/exmpale4.html
http://exmpale.com/abc/abc/exmpale5.html";

$urls = explode("n", $data_raw);

$accept_host = "exmpale.com";
$accept_path = "/abc/";

$filtered_urls = array_filter($urls, function($url) use($accept_host, $accept_path) {
    $parts = parse_url($url);   
    return $parts['host'] == $accept_host
        amp;amp; strpos($parts['path'], $accept_path) === 0
        amp;amp; strpos($parts['path'], '/', strlen($accept_path)) === false;
});

printf("<pre>%s</pre>", print_r($filtered_urls, true));
 

Выдает:

 Array
(
    [0] => http://exmpale.com/abc/exmpale.html
    [1] => http://exmpale.com/abc/exmpale1.html
    [2] => http://exmpale.com/abc/exmpale2.html
)
 

Комментарии:

1. спасибо вам. но данные в строке, и я хочу получить результат exmpale.com/abc/exmpale.html ,http://exmpale.com/abc /… и exmpale.com/abc/exmpale2.html

2. Я понимаю, что вы хотите, чтобы каждый URL-адрес разделялся запятой. Взгляните на обновление.

3. Я только что увидел ваше обновление. Результат, который вы запрашиваете, — это массив $filtered_urls . Вы пробовали код?

4. и в примере это комментарий с тремя ссылками.

5. @phuochq Хорошо, значит, вы не будете принимать никаких дополнительных параметров пути после /abc/?