Различия в шаблонах регулярных выражений - "*" и "+" - PullRequest
0 голосов
/ 29 мая 2011

Я пытаюсь заменить " на inch, т.е. 12" wall станет 12 inch wall

У меня работает 2 шаблона:

/\b([0-9]+)"/ -> preg_replace('/\b([0-9]+)"/', '$1 inch ', $string)

и

/\b([0-9]*)"/ -> preg_replace('/\b([0-9]*)"/', '$1 inch ', $string)

в чем разница между ними, почему + и * работают здесь так же?

ура, / Marcin

Ответы [ 2 ]

1 голос
/ 29 мая 2011

Значения + позволяют найти предыдущий символ / группу 1 или более раз.

Значки * позволяют найти предыдущий символ / группу любое количество раз (0-бесконечность)

1 голос
/ 29 мая 2011

/\b([0-9]+)"/ требует, чтобы между границей слова и " была хотя бы одна цифра, тогда как /\b([0-9]*)"/ также принимает ноль цифр. Таким образом, первое не соответствует пробелу, за которым следует ", а второе -

Если вы хотите обработать как new 15 " tv, так и new 15" tv, вам нужно сопоставить пробел с символом, который может присутствовать или не присутствовать:

/\b([0-9]+)\s?"/

Это соответствует границе слова, за которой следует последовательность (на или более) чисел, за которыми, возможно, следует один пробел (или табуляция), за которым следует ". Я полагаю, это то, что вы ищете. Если нет, сначала вы должны определить строки, которые должны совпадать, и строки, которые могут не совпадать.

...