Помощь с шаблонами Regex - PullRequest
0 голосов
/ 28 января 2009

Мне нужна помощь с регулярным выражением.

  1. У меня есть шаблон AB. *, Этот шаблон должен соответствовать для строк как AB.CD AB.CDX (AB.whither) .и так далее .. Но это не должно совпадать строки, такие как AB, AB.CD.CD, AB.CD. AB.CD.CD, то есть, если он сталкивается с вторая точка в строке. что за регулярное выражение для этого?

  2. У меня есть шаблон AB. **, этот шаблон должен соответствовать таким строкам, как AB, AB.CD.CD, AB.CD. AB.CD.CD но НЕ такие строки, как AB.CD, AB.CDX, AB.от чего бы ни было регулярное выражение это?

Большое спасибо.

Ответы [ 5 ]

2 голосов
/ 28 января 2009

http://www.regular -expressions.info / содержит много полезной информации для изучения регулярных выражений.

2 голосов
/ 28 января 2009

Похоже, у вас есть глобусы, а не регулярные выражения. Точка соответствует любому символу, а * соответствует предыдущему элементу 0+ раз.

1) AB\.[^.]* Избегайте первой точки, чтобы она соответствовала буквальной точке, а затем сопоставляйте любой символ, кроме точки, любое количество раз

2) "^(AB)|(AB\.[^.]*\.[^.]*$" Это соответствует AB или AB, за которым следует .<stuff>.<stuff>

1 голос
/ 28 января 2009

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

^AB\.[^.]+$
^AB(?!\.[^.]+$)

(или

^AB\.[^.]*$
^AB(?!\.[^.]*$) 

, если вы хотите разрешить AB. )

0 голосов
/ 28 января 2009

Я пробовал это в VIM. Вот пример данных:

AB.CD
AB.CDX
AB.whatever
AB
AB.CD.CD
AB.CD.
AB.CD.CD

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

  1. Это захватывает все строки, начинающиеся с AB, затем ожидает буквальную точку, а затем отфильтровывает все строки, имеющие вторую точку.

    ^ AB \. [^.] * $

  2. Это захватывает все строки, которые являются просто AB (деталь перед каналом) или строки, начинающиеся с AB, за которыми следуют две буквальные точки (с обратной косой чертой)

    ^ AB $ \ | ^ AB \ .. \ .. $

0 голосов
/ 28 января 2009

Я не считаю, что ваш вопрос совершенно ясен; пожалуйста, прокомментируйте здесь (или отредактируйте свой вопрос, если вы не можете добавлять комментарии), если я ошибаюсь, но я думаю, что вы ищете:

1) соответствующие строки «AB.AnyTextHereWithoutDots», но не «AB» или «AB.foo». и т.д.

Если так, то подходящее регулярное выражение будет:

"^AB\.[^.]*$"

2) сопоставление "AB" или "AB.something.something" ни с одной, либо с двумя или более точками

Если это так, регулярное выражение будет выглядеть примерно так:

"^AB(\..*\..*)?$" or "'^AB\(\..*\..*\)\?" (depending on the nature of your regex engine)

Как и Дуглас предлагает сопоставление с глобусами, вероятно, будет проще.

И как spdenne предлагает , найдите хорошую ссылку на регулярное выражение.

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