2014-10-24 4 views
1

Мне нужно найти слово (я знаю его) в тексте любой длины, как показано ниже.Найти слово в тексте tath можно начинать с символа, отличного от alfanumeric

My text is very beautyfull. Yours $text is very bautyfull. Their #text, is very beautyfull 

# и $ только образец. Я есть не-alphnumerical характер

я нашел следующее регулярное выражение:

(?<=^|[^a-zA-Z0-9])\Q<word>\E(?=$|[^a-zA-Z0-9]) 

tÀtH работу очень хорошо, если я искать #text или $text, но когда я искать только text это соответствует все вхождения (три в пример ниже), а только одно вхождение text. Есть ли способ сделать это с помощью регулярного выражения?

ответ

0

Добавить # и $ в первый отрицательный класс char, который присутствовал внутри положительного lookbehind. Так что это не будет соответствовать строке text, которая предшествовала # или $ или a-z или A-Z или 0-9

(?<=^|[^a-zA-Z0-9$#])\Qtext\E(?=$|[^a-zA-Z0-9]) 

DEMO

+0

или вы могли бы просто использовать эту функцию '(<=^|? [^ \ S $ #]) \ Qtext \ E (? = $ | [^ \ S]) ' –

+0

' # 'и' $ 'просты, у меня могут быть и другие символы. Мне нужно что-то вроде '\ b', которое также работает с не-буквенно-цифровыми символами. – theShadow89

+0

yep, но вам нужно удалить '\ Q \ E' .. Я думаю, что вы хотите достичь, не удаляя' \ Q \ E' –