2013-12-01 3 views
4

У меня есть конкретное регулярное выражение:Regex граница слова не узнавая знаки препинания

#\b[a-z0-9-_%"]+\b#gi 

Я следующий тест строки, я подаю, что регулярное выражение фильтр:

abc def ghi jkl mno %%car% __car_ tall-person "thing" 20% %30% 

Однако обнаруженные словоразделами (квадратные скобки представляют границы):

[abc] [def] [ghi] [jkl] [mno] %%[car%] [__car_] [tall-person] "[thing"] [20%] %[30%] 

Таким образом, некоторые виды пунктуации («_») распознаются как в начале, так и в конце слова как «символы слова». С другой стороны, другие типы («%» или «двойные кавычки») игнорируются, когда они находятся в начале слова. Почему это?

+0

Какой вкус это? Это [PHP] (https://www.debuggex.com/r/TwxcqZK2MQeRRpm8)? Он также не работает на [ruby] (http://rubular.com/r/fOKEIG9WVQ). Не могли бы вы показать код, который вы использовали для создания последней строки (с помощью '[]'). – Kobi

ответ

3

В текстовой границе, слово средства \w знак в металле (в большинстве двигателей регулярного выражения): [A-Za-z0-9_]; %, " не в том, что символы: совпадение границы слова.

Я думаю, что вам не нужно использовать границу слова:

// javascript example 
> 'abc def ghi jkl mno %%car% __car_ tall-person "thing" 20% %30%'.match(/[a-z0-9-_%"]+/g) 
["abc", "def", "ghi", "jkl", "mno", "%%car%", "__car_", "tall-person", ""thing"", "20%", "%30%"] 
+0

Спасибо за ответ! Любопытно, есть ли способ изменить символы, которые граница слов считает «символами слов»? Или это камень? Между прочим, я использую javascript-реализацию регулярного выражения. – AlexZ

+0

@AlexZ, Насколько я знаю, такого пути нет. – falsetru

Смежные вопросы