2013-03-04 1 views
0

Я использую своего рода закладки в тексте. Эти закладки структурированы так: (# + поле + #)Регулярное выражение: как совместить слова, предшествующие и сопровождаемые определенной последовательностью символов и содержащие некоторые другие символы

«Поле» должно содержать только алфавитные символы (A-Z и a-z, а не цифры или другие символы).

Мне нужно совместить слова, не удовлетворяющие этому правилу.

Итак, рассмотрим следующие примеры:

  1. (# НазваниеКомпании #)
  2. (# Company_Name #)
  3. (# Company5Name #)

Только первый один правильный но я должен соответствовать другим двум случаям. Узор в соответствии с первым из них является:

(\(\#)[A-Za-z]+(\#\)) 

Чтобы соответствовать неправильные случаи, мне нужно что-то вроде этого:

(\(\#)[^A-Za-z]+(\#\)) 

Но это не работает правильно.

Может ли кто-нибудь предложить мне, как заставить его работать?

Заранее спасибо и извините за мой английский ...

ответ

1

Вы можете попробовать

\(#[^#]*?[^A-Za-z#]+[^#]*?#\) 
+0

Убедитесь, чтобы избежать внешней скобки (или удалить). В противном случае '[# CompanyName #]' выглядит верным. Внутренние не имеют никакой цели. Если они не содержат # каждого, то весь матч не удался. – FakeRainBrigand

+0

Кажется почти правильным, но он также ловит следующий случай: (# CompanyName #) - (# Address #) – speednick

+0

@speednick Что относительно? – alestanis

1

Это должно работать:

\(#.*?[^A-Za-z].*?#\) 

\( - спасся (
# - хэш
.*? - ноль или более дикие карты (нежидко)
[^A-Za-z] - один недопустимый знак
.*? - zer о или более дикие карты (не жадностью)
# - хэш
\) - сбежавшие)

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