Nie jestem pewien, dlaczego regex - b((+65[s-]*)?[3689]d{3}[s-]*d{4})b
nie działa +6565066859
Odpowiedzi:
1 dla odpowiedzi № 1Twój wzorzec obecnie nie działa z powodu granicy słowa, która jest umieszczona na początku. Pamiętaj, że granica słowa będzie pasować między słowem a
- nie-słowo-znak
- początek ciągu
- koniec ciągu
W Twoim przypadku b
jest umieszczony między początkiem łańcucha a +
, gdzie się dopasuje, a więc twój pierwszy opcjonalnygrupa nigdy nie będzie pasować. Reszta wzorca składa się z 8-cyfrowej liczby (jeśli na chwilę zapomnimy spacji i łączników), ale liczba, którą spróbujesz przetestować, składa się z 10 znaków, więc obie granice słów nie mogą się równać.
Myślę, że możesz przepisać swój wzorzec jako ((?:(+65[s-]*)|b)[3689]d{3}[s-]*d{4})b
w ten sposób dopasowując +65 lub granicę słowa. Nie jestem pewien, czy używasz grup przechwytujących we wzorcu, więc zachowałem je tak, jak są.