Как сопоставить строку, которая не заканчивается определенной подстрокой? - PullRequest
2 голосов
/ 05 июля 2010

как я могу написать регулярное выражение, чтобы доза не содержала строки в конце. в моем проекте все классы, имена которых не оканчиваются какой-либо строкой, такой как «controller» и «map», должны наследоваться от базового класса. Как я могу сделать это с помощью регулярного выражения?


, но с использованием обоих

public*.class[a-zA-Z]*(?<!controller|map)$ 
public*.class*.(?<!controller)$ 

нет совпадений !!!

Ответы [ 5 ]

6 голосов
/ 05 июля 2010

Выполнить поиск всех имен файлов, соответствующих этому:

(?<!controller|map|anythingelse)$

(Удалите |anythingelse, если нет других ключевых слов, или добавьте другие ключевые слова аналогичным образом.)

Если вы не можете использовать отрицательные lookbehinds (бит (?<! .. )), выполните поиск имен файлов, которые не соответствуют этому:

(?:controller|map)$

И если это все еще не работает (возможно, не в некоторых IDE), удалите часть ?:, и это, вероятно, сработает - это просто делает ее не захватывающей группой, но разница здесь довольно незначительна.

Если вы используете что-то, где полная строка должна совпадать, то вы можете просто сделать префикс любого из вышеперечисленных с ^.*, чтобы сделать это.


Обновление:

В ответ на это:

, но с использованием обоих
public*.class[a-zA-Z]*(?<!controller|map)$
public*.class*.(?<!controller)$
нет ни одного совпадения !!!

Не совсем уверен, что вы пытаетесь сделать с публикой / классом, так что попробуйте это:

public.*class.*(?<!controller|map)$`

. - это регулярное выражение, которое означает «все, кроме новой строки», а * означает ноль или более раз.

Если это не то, что вам нужно, отредактируйте вопрос с более подробной информацией.

2 голосов
/ 05 июля 2010

В зависимости от вашей реализации регулярных выражений, вы можете использовать просмотр для этой задачи.Это будет выглядеть как

(?<!SomeText)$

Это соответствует любым строкам, не имеющим «SomeText» в конце.Если вы не можете использовать это, выражение

^(?!.*SomeText$).*$

соответствует любым непустым строкам, не заканчивающимся также на «SomeText».

1 голос
/ 05 июля 2010

Вы можете написать регулярное выражение, которое содержит две группы, одна состоит из одного или нескольких символов перед контроллером или картой, другая содержит контроллер или карту и является необязательной.

^(.+)(controller|map)?$

При этом вы можете сопоставить свою строку, и если в используемом вами regex API есть метод group(), если group(2) пусто, строка не содержит контроллер или карту.

0 голосов
/ 06 июля 2010

наконец-то я так и сделал

public.*class.*[^(controller|map|spec)]$

это сработало

0 голосов
/ 05 июля 2010

Проверьте, не совпадает ли имя контроллера [a-zA-Z] * или [a-zA-Z] *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...