Помощь с регулярным выражением - извлечение текста - PullRequest
2 голосов
/ 17 июня 2010

У меня есть 3 отдельные строки:

$d = 'Created on November 25, 2009';
$v = 'Viewed 17,603 times';
$h = '1,200 hits';

Который необходимо преобразовать в:

$d1 = {отметка времени unix от 25 ноября 2009 г.};

$v1 = "17603"; (запятые, если они существуют)

$h1 = "1200"; (запятые, если они существуют)

Какой самый эффективный способ сделать это (возможно, с помощью регулярных выражений)? Любой фрагмент кода был бы великолепен.

Ответы [ 3 ]

0 голосов
/ 17 июня 2010

РЕДАКТИРОВАТЬ: Да, это не так уж сложно

$d = 'Created on November 25, 2009';
$v = 'Viewed 17,603 times';
$h = '1,200 hits';

$d1 = strtotime( str_replace( 'Created On ', '', $d ) );
$v1 = str_replace( ',', '', preg_replace( '/[a-zA-Z\s]+([0-9,]+)[a-zA-Z ]+/', '$1', $v ) );
$h1 = str_replace( ',', '', preg_replace( '/([0-9,]+)[a-zA-Z ]+/', '$1', $h ) );
0 голосов
/ 17 июня 2010

Используйте решение Керри с str_replace.Короткий, легко обслуживаемый.

Вы можете использовать регулярное выражение для удаления запятых, но если вы не можете написать это, как вы собираетесь это исправить?

ИЛИ

Выможет не иметь запятой (числа меньше 1000), одной запятой (1000-999,999), двух запятых (1,000,000-999,999,999) .. тогда вы можете использовать выражение вроде:

$v = 'Viewed 17,603 times';
$h = '1,200 hits';
$pattern = '/(\d+)[,]*(\d*)[,]*(\d*)/';
$replacement = '${1}${2}${3}';
echo preg_replace($pattern, $replacement, $v);
echo preg_replace($pattern, $replacement, $h);
0 голосов
/ 17 июня 2010

Для первого:

$d_stripped = str_ireplace("Created on ", null, $d);
$created = strtotime($d_stripped);

для второго и третьего, кто-то более опытный с регулярными выражениями, чем я, несомненно, даст хорошее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...