Быстрая помощь с регулярным выражением в PHP - PullRequest
0 голосов
/ 16 июля 2011

Я не очень хорошо разбираюсь в регулярных выражениях, но мне нужно убрать идентификаторы из URL-адресов из большого блока текста.

URL выглядит следующим образом:

domain.com /path / ID_GOES_HERE

Проблема заключается в том, что внутренние почтовые сообщения имеют широкий спектр форматов:

- <a href="http://www.domain.com/path/ID_GOES_HERE">http://www.domain.com/path/ID_GOES_HERE</a>
- www.domain.com/path/ID_GOES_HERE
- http://domain.com/path/ID_GOES
_HERE

Идентификатор состоит только из букв и цифр.Никаких других символов.

РЕДАКТИРОВАТЬ: Другая проблема заключается в том, что, поскольку я обрабатываю электронные письма, которые ужасно отформатированы, иногда URL заканчивается в конце строки, где он разбивается на две строки,в конце ставится знак равенства, например:

http://www.domain.com/path/EE33FDE291A=
8D972

Таким образом, идентификатор искажается.

Ответы [ 3 ]

0 голосов
/ 16 июля 2011
preg_match('/^domain\.com\/path\/([a-zA-Z0-9]*)$/', $text, $matches = array());
if(isset($matches[1]))
  echo $matches[1];
0 голосов
/ 16 июля 2011

попробуйте это регулярное выражение

/(?:https?:\/\/)?(?:www.)?domain.com/path/([\d\w]+(?:\=?(?:\(?:[\r\n]|\r\n|)(?:[\d\w]+)?)?)/

похоже соответствует всем вашим тестам

0 голосов
/ 16 июля 2011

Это должно сделать то, что вам нужно:

<?php
$matches = array();
preg_match_all('@domain\.com/path/((?:[a-z0-9_]|=\n)*)@i', $subject, $matches);
foreach ($matches[1] as $id) {
    $id = str_replace("=\n", '', $id);
    // Do your processing here.
}
...