Mam świadomość, że kwestia dotycząca znaku dolara "$" w regex (tutaj: w PHP i JavaScript) została omawiane wiele razy wcześniej: Tak, wiem, że muszę dodać przed nim ukośnik odwrotny "\" (w zależności od przetwarzania ciągu nawet dwóch), ale poprawnym sposobem na dopasowanie znaku dolara jest "\ $". ... Byłem tam, robiłem to, działa dobrze.
Ale oto mój nowy problem: Znaki dolara "\ $" obok granic słów oznaczonych "\ b". ... Moje kolejne przykłady można łatwo odtworzyć na przykład w regexpal.com.
Zacznijmy poniższym tekście, aby szukać w:
Dolara 50
Dollars 50
50 $
USD 50
Moje regex powinny znaleźć "USD", "Dolar" lub "$". Dość łatwe: Spróbujmy
(USD | Dolar | \ $)
sukcesu: ona znajdzie "$", w "USD" i zarówno "dolara" zdarzeń, w tym w „dolarach ".
Ale spróbujmy pominąć "dolarów" dodając granicy słowa po wielokrotnego wyboru:
(USD | Dolar | \ $) \ b
I to jest problem " USD "jest dopasowany," Dollar "jest dopasowany," Dollars "jest odrzucony ... Ale pojedynczy, poprawnie backslashed (lub escaped)" $ "jest również odrzucany, chociaż to działało przed chwilą.
To nie wiąże się z pytań wielokrotnego wyboru wewnątrz nawiasów: Spróbuj tylko
\ $
vs.
\ $ \ b
i jest tak samo: pierwszy dopasowuje się do znaku dolara, drugi jeden nie.
Innym odkryciem:
(USD | Dolar | \ $) \ b
z blank "" pomiędzy ")" i "\ b" faktycznie działa . Ale to obejście może nie być opłacalne w każdych okolicznościach (na wypadek, gdyby granica nie była pusta).
Wygląda na to, że uciekł znak dolara, odmawia się znalezienia, gdy zaangażowane są granice słów.
Chciałbym usłyszeć wasze sugestie, aby rozwiązać tę zagadkę. -- Z góry dziękuję!
Od [MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions): * "Granica słowa odpowiada pozycji, w której znak słowny nie jest śledzony lub poprzedzony innym znakiem słownym. "* Jednak' $' i spacje nie są znakami słownymi. –