Мне известно, что проблема, связанная со знаком доллара «$» в регулярном выражении (здесь: либо в PHP, либо в JavaScript), неоднократно обсуждалась ранее: да, я знаю, что мне нужно добавить обратную косую черту «\» перед ней ( в зависимости от обработки строки даже двух), но правильный способ сопоставления знака доллара — «\ $». … Был там, сделал это, отлично работает.
Но вот моя новая проблема: знаки доллара «\ $» рядом с границами слов, отмеченных «\ b». … Мои следующие примеры могут быть легко воспроизведены, например, на regexpal.com.
Давайте начнем со следующего текста для поиска:
Доллар 50
50 долларов
50 долларов
50 долларов США
Мое регулярное выражение должно найти «USD», «Dollar» или «$». Достаточно просто: давайте попробуем
(USD | Доллар | \ $)
Успех: он находит вхождения «$», «USD» и оба «доллара», в том числе в «долларах».
Но давайте попробуем пропустить «доллары», добавив границы слов после множественного выбора:
(USD | Доллар | \ $) \ б
И это проблема: «USD» сопоставляется, «Dollar» сопоставляется, «Dollars» отклоняется … Но также отбрасывается одинарный, должным образом обратный слеш (или экранированный) «$», хотя это работало всего секунду назад ,
Это не связано с множественным выбором внутри скобок: попробуйте просто
\ $
против
\ $ \ Ь
и это то же самое: первый соответствует знаку доллара, второй нет.
Еще одна находка:
(USD | Доллар | \ $) \ b
с пробелом «» между «)» и «\ b» фактически работает. Но этот обходной путь не может быть жизнеспособным при всех обстоятельствах (в случае, если должна быть граница слова без пробелов).
Кажется, что сбежавший знак доллара не может быть найден, когда речь идет о границах слов.
Я хотел бы услышать ваши предложения, чтобы разгадать эту загадку. — Заранее большое спасибо!
Это не соответствует, потому что в $
нет границы слова сразу после $
, Было бы, однако, если бы слово началось сразу после $
— например
$ Миллионы
будет соответствовать.
Что вы, вероятно, хотите сделать, это сделать \b
применимо только к тем случаям, когда вы действительно хотите сопоставить границу слова — например,
(USD\b|Dollar\b|\$)
Это будет настаивать на наличии границы слова после «USD» и после «Dollar», но не после «$».
Других решений пока нет …