Сопоставить подстроку с предшествующей комбинацией ИЛИ - PullRequest
0 голосов
/ 25 января 2012

Я пытаюсь извлечь подстроку в следующем формате:

preceeding-string-data-i-want

Где:

preceeding-string

должно быть одним из stringA или stringB или stringC.

Я пытался использовать:

(?:stringA|stringB|stringC)-?([A-Za-z\d]*)

но это приводит к неправильным совпадениям. Я не могу понять, где я иду не так.

- РЕДАКТИРОВАТЬ -

Соответствие stringA-pine-9000 дает мне stringA-pine и pine как совпадения.

Ответы [ 2 ]

1 голос
/ 25 января 2012

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

(?:stringA|stringB|stringC)-?([A-Za-z\d-]*)
0 голосов
/ 25 января 2012

Примерно так должно получиться:

((stringA)|(stringB)|(stringC))-?([A-Za-z\d]*)

Это будет соответствовать: stringA-dataIWantfff, stringBDataIWant, stringC-DataIWant123, но не stringD-DataIWant, и будет соответствовать всему, кроме @ в stringC-DataIWant@.

Проблема, с которой я сталкиваюсь, заключается в том, что в разделе data-i-want вы включили тире (-), которые вы не включили в свое исходное регулярное выражение. Я предполагаю, что data-i-want- не содержит тире. Если это так, то вы можете добавить его так:

((stringA)|(stringB)|(stringC))-?([A-Za-z\d\-]*)

Это будет соответствовать чему-то вроде: stringA-Data-I-Want.

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