Regex to match words может содержать или не содержать символы ascii, которые начинаются с определенного символа char [duplicate]

Поддержка Unicode в PHP по-прежнему огромна. Хотя он способен преобразовывать строку ISO8859 (которая используется внутри нее) в utf8, ей не хватает возможности работать с строками unicode изначально, что означает, что все функции обработки строк будут искажать и повреждать ваши строки. Таким образом, вам нужно либо использовать отдельную библиотеку для правильной поддержки utf8, либо самостоятельно переписать все функции обработки строк.

. Легкая часть - это просто указать кодировку в заголовках HTTP и в базе данных и т. Д., Но нет что имеет значение, если ваш PHP-код не выводит допустимый UTF8. Это сложная часть, и PHP практически не помогает. (Я думаю, что PHP6 должен исправить худшее из этого, но это все еще вдалеке)

11
задан limlim 5 June 2013 в 15:14
поделиться

3 ответа

В конце концов я нашел это: twitter-text.js полезная ссылка, в которой, как правило, решается эта проблема.

7
ответ дан M98 31 August 2018 в 15:47
поделиться

С родными JS-регулярными выражениями, которые не поддерживают юникод, ваш единственный вариант - явно перечислять символы, которые могут заканчивать тег, и сопоставлять все остальное, например:

> s = "foo #הַתִּקְוָה. bar"
"foo #הַתִּקְוָה. bar"
> s.match(/#(.+?)(?=[\s.,:,]|$)/)
["#הַתִּקְוָה", "הַתִּקְוָה"]

. [\s.,:,] должен включают пробелы, знаки препинания и все остальное можно считать завершающим символом.

2
ответ дан georg 31 August 2018 в 15:47
поделиться

#([^#]+)[\s,;]*

Объяснение: Это регулярное выражение будет искать #, за которым следует один или несколько символов не #, за которым следует 0 или более пробелов, запятых или точек с запятой.

var input = "#hasta #mañana #babהַ";
var matches = input.match(/#([^#]+)[\s,;]*/g);

Результат:

["#hasta ", "#mañana ", "#babהַ"]

EDIT - Заменено \ b для границы слова

0
ответ дан itsmejodie 31 August 2018 в 15:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: