[PHP] Unicode w wyrazeniu regularnym

0

Kod:

$x = 'jak programować';
echo preg_replace('~\bjak progra\w*?\b~iu', '<u>\\0</u>', $x);

Rezultat:

__jak programowa__ć

Spodziewany rezultat:

jak programować

Wiem, ze \w nie zadziala w przypadku UTF. Probowalem z \p{L} ale bez rezultatow.

1

\p{L} działa dobrze, to przez \b się wszystko psuje. Po prostu \b nie rozpoznaje tego miejsca: "programować**|** programować" jako granicy słowa. Zachłanne dopasowywanie liter bez zwracania uwagi na granicę słowa powinno dać radę.

~\bjak progra\p{L}*~iu

PS. Może jeszcze wystąpić problem z początkowym \b

Ogólnie to żeby nie mieć problemów z UTF8 w wyrażeniach wypadałoby zrezygnować całkowicie z \b i zastąpić granicę początku słowa tym:
(?<![\p{L}\p{N}])
a granicę końca słowa tym:
(?![\p{L}\p{N}
])

1 użytkowników online, w tym zalogowanych: 0, gości: 1