2013-08-26 3 views
0

У меня есть блоки свободного текста, которые содержат несколько трехзначных цен, которые мне нужно захватить. При желании они начинаются с '$' или в качестве альтернативы пространстваНеизвестная ошибка модификатора в php regex

у меня есть:

preg_match_all("|[\s|\$][\d]{3}|", $html, $prices); 

Это дает мне:

Severity: Warning 
Message: preg_match_all(): Unknown modifier '$' 

Как я могу это исправить?

ответ

4

Вы используете трубы в качестве разделителей для регулярного выражения и также использовали трубу в классе символов. Если вы имеете в виду «либо пробел/табуляцию/символ новой строки, либо знак доллара», просто отбросьте трубку в первом классе символов, вам это не нужно, и это приносит больше вреда, чем пользы.

preg_match_all этот часть как регулярное выражение: [\s и модификаторы как \$][\d]{3}| ... который он не может понять.


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

preg_match_all("~[\s|\$][\d]{3}~", $html, $prices); 

preg_match_all("/[\s|\$][\d]{3}/", $html, $prices); 
3

Прежде всего не обернуть Regexps в специальных символов, таких как | или .. Просто используйте ~, поскольку я делаю это почти никогда не происходит в шаблоне регулярного выражения, по сравнению с /, который встречается очень часто в HTML и URL-адресах.

Вам необходимо использовать одиночные кавычки, чтобы включить $. Что вы там делаете, эквивалентно '$' в регулярном выражении. Пока вы хотите '\$'. Поэтому вам нужно использовать одинарные кавычки или просто использовать '\\\$'. Но перейдите для одиночных кавычек, если вам не нужны переменные PHP, встроенные в строку с "{$var}".

preg_match_all('~[\s|\$][\d]{3}~', $html, $prices); // try this 
+0

Почему downvote, homie? Поправьте меня ... – CodeAngry

+1

Собственно, '\ $' в двойных кавычках отлично работает (поскольку '$' не является метасимволом в классах символов). Тем не менее, шаблоны регулярных выражений всегда должны записываться с одинарными кавычками (в этом случае вы можете полностью отказаться от обратного слэша). –

+0

Спасибо за совет – user61629

Смежные вопросы