PHP регулярное выражение для соответствия двум иглам - PullRequest
0 голосов
/ 01 октября 2009

Я ищу, чтобы извлечь 2 элемента из строки в массив. Строка является погодой:

Thursday at 08:00 BST: white cloud. 10°C (50°F)

Мне нужны детали " белое облако " и " 10 ° C ". Поэтому мне нужно сопоставить между " BST: " и ". ", а также "" и " ° C "

Я борюсь с нужным регулярным выражением (ями) и буду очень признателен за помощь!

Ответы [ 4 ]

3 голосов
/ 01 октября 2009

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

^\w+ at \d{2}:\d{2} BST: ([^.]+)\. (-?\d+°C)

Если между словами нет ни одного пробела, замените их на \s+.

2 голосов
/ 01 октября 2009

Примерно так должно поступить:

preg_match('/: (.*?)\. (-?\d+)/', $str, $matches);

На что нужно обратить внимание:

  • Не совпадайте по BST, иначе он перестанет зимой, когда мы перейдем в GMT
  • Остерегайтесь отрицательных температур
0 голосов
/ 01 октября 2009

Вы можете использовать группы захвата . Все в круглых паратезах будет захвачено (по умолчанию), и вы можете получить то, что они совпали позже:

:\s+([^.]*)\s+([\d]*)

Если это ваше регулярное выражение, вы можете использовать его с preg_match:

$matches = array();
preg_match('/:\s+([^.]*)\s+([\d]*)/', $string, $matches);

$matches будет содержать содержимое групп захвата.

0 голосов
/ 01 октября 2009

Что-то вроде:

/BST: (.*) ([0-9]+°C)/

Должно работать, хотя у вас могут возникнуть проблемы с соответствием °, если вы попробуете:

/BST: (.*) ([0-9]+.C)/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...