регулярное выражение для размера $ {word} - php preg_replace - PullRequest
0 голосов
/ 04 июля 2011

Не могли бы вы помочь мне с регулярным выражением для следующих примеров:

lorem ipsum size large lorem ipsum

или

lorem ipsum size m lorem ipsum

или

lorem ipsum size 39.5 lorem ipsum 

Итак, я пытаюсьизвлечь одно слово / строку после слова / разделителя size до следующего пробела.так что в приведенных выше примерах это будет (по порядку): большое, м, 39,5.

Любые идеи?

Быстрое обновление: не могли бы вы включить также возможность

size:$(size)

или

size: $(size)

или

size $(size)

Ответы [ 3 ]

3 голосов
/ 04 июля 2011
if (preg_match('/\bsize\W+(\S+)/', $subject, $regs)) {
    $result = $regs[1];
} else {
    $result = "";
}

\bsize\W+ соответствует size плюс один или несколько не алфавитно-цифровых символов (пробелы, знаки препинания и т. Д.), Но не соответствует capsize из-за привязки границы слова \b.

Затем (\S+) соответствует одному или нескольким непробельным символам и захватывает их в первой обратной ссылке (в данном случае $regs[1]).

1 голос
/ 04 июля 2011
$strings = array(
    'lorem ipsum size large lorem ipsum',
    'lorem ipsum size m lorem ipsum',
    'lorem ipsum size 39.5 lorem ipsum ',
);
foreach ( $strings as $string ) {
    if ( preg_match('#\bsize\b\s+(\S+)\s#', $string, $matches) ) {
        echo "<b>Matched '{$string}':</b>\n\n";
        print_r($matches);
    }
}

Выход:

Matched 'lorem ipsum size large lorem ipsum':
Array
(
    [0] => size large 
    [1] => large
)

Matched 'lorem ipsum size m lorem ipsum':
Array
(
    [0] => size m 
    [1] => m
)

Matched 'lorem ipsum size 39.5 lorem ipsum ':
Array
(
    [0] => size 39.5 
    [1] => 39.5
)

Размер сохраняется в $matches[1].

0 голосов
/ 04 июля 2011
preg_match('/\ssize\s+(\S+)/', $string, $matches);
echo $matches[1];
...