2016-08-20 3 views
0

Я хочу получить весь текст, который не начинается с 1,2,12,34.
я написалRegex - выберите весь текст, который не начинается с определенного номера

^((?!1|2|12|34).)*$ 

(^ утверждает положение в начале строки)
как в:

https://regex101.com/r/gI6sN8/14

Проблемы

  • Он также не выбирает текст, который имеет 1 или 2 в середине («AB 1 CD»).
  • Он также не выбирает 13 (потому что он начинается с 1)

Как я могу ограничить его

+0

Я думаю, что его расположение ** ['скобки'] (https://regex101.com/r/gI6sN8/15) ** – rock321987

+0

также вам нужно ** [' \ b'] (https: // regex101 .com/r/gI6sN8/17) ** – rock321987

+0

«get», вы имеете в виду «матч»? –

ответ

2

Похоже, вы хотите:

^(?!(1|2|12|34)\s).* 

https://regex101.com/r/gI6sN8/16

+0

Отлично кстати, что делает \ s делать? – Jeb

+0

Он вводит пробел после номера, чтобы предотвратить '1' от соответствия' 13' (например) – hek2mgl

1

Как уже упоминалось в комментарии, вам нужна граница слов и правильная скобковая позиция

^(?!(?:1|2|12|34)\b)(.*)$ 

Regex Demo

Вы также можете использовать \D

^(?!(?:1|2|12|34)\D)(.*)$ 

В своем регулярном выражении

^((?!1|2|12|34).)*$ 

вы найти ли какие-либо из вышеперечисленных альтернативных 1|2|12|34 верна на каждой позиции. Вот почему это не соответствует AB 1 CD

+0

Что делает '\ b'? Я сомневаюсь, что это когда-нибудь будет соответствовать началу строки. –

+0

@torazaburo вы правы .. обновил его – rock321987

+0

Спасибо, Это также фильтрует 13. что не является действием, которое я искал @ hek2mgl, решил его. – Jeb

1

Это работает

^(?!(?:12?|2|34)(?!\d)).+$
https://regex101.com/r/gI6sN8/19

Действительная граница между числами вы не хотите, чтобы
начать с и характер после того, как представляется, любой нецифровой.