регулярка: поддержка юникода, русские буквы - какой символьный класс?

natalie

Новичок
регулярка: поддержка юникода, русские буквы - какой символьный класс?

Здравствуйте,

у меня такая проблема:
из строки регуляркой я достаю id автора и его имя, кладу в массив:

PHP:
$content = '"authors.php?aut_id= 505 ">Абеляр Пьер"authors.php?aut_id= 113 ">Аврелий Марк"authors.php?aut_id= 440 ">Адамс Генри Брукс
preg_match_all('/"authors.php\?aut_id=\s([0-9]{3})\s">(\w*)/', $content, $mathces);
когда печатаю массив $matches - имена авторов там, где я их ожидаю увидеть отсутствуют.

это потому, что (\w*) - не подходит, буквы то русские, а не [a-zA-Z_]

а еще там среди авторов есть такой:

Яков I Стюарт

вот это "I" английское тоже нужно учесть.

помогите пожалуйста

спасибо
 

Anarki

Новичок
use locale
так же есть модификатор u у регулярок
\w верный класс символов
 

natalie

Новичок
я читала на phpclub статьи про регулярные выражения, но там ничего об этом не сказано, и на форуме я такого вопроса не нашла
 

kvf77

Red Devil
natalie
пиши A-ZА-Я подругому никак

\w никак не учитывает русские символы, еще надо указывать модификатор принадлежности паттерна к UTF-8 - А-Я естетсвенно в UTF-8 должны быть написаны.
 

Anarki

Новичок
А точно, \w не работет с utf должным образом, но с другими однобайтными кодировками спокойно, главное не забыть нужную локаль выставить.
 

natalie

Новичок
ага, спасибо,

а я вот так сделала:

([^"]+)

и целиком:

preg_match_all('/"authors.php\?aut_id=\s([0-9]{3})\s">([^"]+)/', $content, $mathces);

заработало
 
Сверху