Регулярное выражение для соответствия строке, не содержащей слова

Я решил решить проблему, когда уровень сервиса использует Visual Studio IIS Express. Просто укажите, что 10.0.2.2:port не будет работать. Вместо того, чтобы возиться с IIS Express, как упоминалось в других сообщениях, я просто поставил прокси-сервер перед IIS Express. Например, apache или nginx. Nginx.conf будет выглядеть как

 # Mobile API
 server { 
    listen       8090;
    server_name  default_server;

    location / {
        proxy_pass http://localhost:54722;
    }
  }

. Затем андроид должен указывать на мой IP-адрес, как 192.168.x.x: 8090

4036
задан 19 revs, 13 users 18% 29 May 2019 в 06:23
поделиться

4 ответа

Понятие, что regex не поддерживает инверсию, соответствующую, не совсем верно. Можно подражать этому поведению при помощи отрицательного взгляда-arounds:

^((?!hede).)*$

regex выше будет соответствовать любой строке, или строка без разрыва строки, не содержащий (sub) представляет 'Эде' в виде строки. Как упомянуто, это не что-то, что regex "хорош" в (или должен сделать), но тем не менее, это возможно.

И если необходимо соответствовать символам разрыва строки также, используйте эти ТОЧКА - ВЕСЬ модификатор (запаздывание s в следующем шаблоне):

/^((?!hede).)*$/s

или использование это встраивает:

/(?s)^((?!hede).)*$/

(где эти /.../ regex разделители, т.е. не часть шаблона)

, Если ТОЧКА - ВЕСЬ модификатор не доступен, можно подражать тому же поведению с классом символов [\s\S]:

/^((?!hede)[\s\S])*$/

Объяснение

строка А является просто списком n символы. Прежде, и после каждого символа, существует пустая строка. Так список n символы будут иметь n+1 пустые строки. Рассмотрите строку "ABhedeCD":

    ┌──┬───┬──┬───┬──┬───┬──┬───┬──┬───┬──┬───┬──┬───┬──┬───┬──┐
S = │e1│ A │e2│ B │e3│ h │e4│ e │e5│ d │e6│ e │e7│ C │e8│ D │e9│
    └──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┘

index    0      1      2      3      4      5      6      7

, где эти e пустые строки. regex (?!hede). смотрит вперед, чтобы видеть, нет ли никакой подстроки "hede", чтобы быть замеченной, и если это так (таким образом, что-то еще замечено), затем эти . (точка) будет соответствовать любому символу кроме разрыва строки. Взгляд-arounds также называют утверждения нулевой ширины , потому что они не делают , используют любые символы. Они только утверждают/проверяют что-то.

Так, в моем примере, каждая пустая строка сначала проверена, чтобы видеть, нет ли никакого "hede" вперед, прежде чем символ будет использован эти . (точка). regex (?!hede). сделает это только однажды, таким образом, он будет перенесен в группу и повторил нуль или больше раз: ((?!hede).)*. Наконец, запуск - и конец входа привязывается, чтобы удостовериться, что весь вход используется: ^((?!hede).)*$

, Как Вы видите, вход "ABhedeCD" перестанет работать, потому что на [1 122], сбои regex (?!hede) (там "hede" вперед!).

5538
ответ дан 10 revs, 6 users 83% 29 May 2019 в 16:23
поделиться
  • 1
    Wouldn' t это быть более простым заменить IMG' s SRC со статическим изображением? – Yuriy Galanter 4 October 2013 в 11:28

, Если Вы просто используете его для grep, можно использовать grep -v hede для получения всех строк, которые не содержат Эде.

ETA, О, перечитывая вопрос, grep -v, вероятно, что Вы подразумевали "под опциями инструментов".

195
ответ дан Athena 29 May 2019 в 16:23
поделиться

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

51
ответ дан Josh Lee 29 May 2019 в 16:23
поделиться
  • 1
    @Matthias: Я знаю что volatile средства. Я никогда не видел volatile используемый на статическом элементе данных прежде, и Ваша ссылка Википедии не указывает, существуют ли различные характеристики volatile статичными по сравнению с volatile нестатичный. Кажется, что большинство людей в наше время использует synchronized или java.util.concurrent для создания вещей ориентированными на многопотоковое исполнение. Это не означает, что Ваше использование volatile является неправильным. Однако это - одна необычная вещь, которую я вижу в Вашей реализации, и поэтому кандидат на то, чтобы так или иначе быть источником Вашей трудности. – CommonsWare 24 February 2011 в 23:39

Другая опция состоит в том, что для добавления положительного предвидения и проверки, если бы hehe находится где-нибудь во входной строке, то мы инвертировали бы это с выражением, подобным:

^(?!(?=.*\bhede\b)).*$

с границами слова.

<час>

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

<час>

Схема RegEx

jex.im визуализирует регулярные выражения:

enter image description here

2
ответ дан 17 December 2019 в 16:00
поделиться
Другие вопросы по тегам:

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