регулярное выражение - знаки доллара в границах символов - PullRequest
0 голосов
/ 30 ноября 2018

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

$string = '$$';
$string = ' $$ ';
$string = "\n$$\n";

Вот шаблоны, которые я пробовал:

$pattern = '/\b\$\$\b/';     // First attempt at escaping dollar signs
$pattern = '/\b\\\$\\\$\b/'; // Maybe backslashes need to be escaped
$pattern = '/\b$$\b/';       // Maybe dollar signs shouldn't be escaped
$pattern = "/\b\$\$\b/";     // Maybe we need double quotes for special characters
$pattern = "/\b\\\$\\\$\b/"; // Double quotes and double-escaping

Ни один из вышеприведенных шаблонов не возвращает совпадений при запуске:

preg_match($pattern, $string);

Есть идеи?Спасибо.

1 Ответ

0 голосов
/ 30 ноября 2018

И OP, и @JonStirling в основном взломали эту проблему, прежде чем я опубликовал этот ответ.Ваш самый первый паттерн \b\$\$\b правильный, по крайней мере с точки зрения правильного выхода знака доллара.Проблема в том, что границы слов в основном касаются границ между словами и не словами.Поскольку знак доллара не является символом слова, \b ведет себя не так, как вы хотите.

Вот альтернатива, которая использует обходные пути в качестве прокси для границ слова:

$string = ' $$';
$pattern = '/(?<=\s|^)\$\$(?=\s|$)/';
echo preg_match($pattern, $string, $match);

Логиказдесь мы проверяем наличие пробелов или начала / конца строки по обе стороны от знаков доллара.

...