Я хочу знать, есть ли какой-либо способ, чтобы подтвердить, сгруппировала ли сопоставление. Например, давайте посмотрим, что я хочу, чтобы выполнить следующие 2 строки:Проверка правильности сопоставления регулярных выражений
string 1: "start magic someword anotherword test end"
string 2: "start test x y z end"
Я хочу, чтобы получить строку, которая имеет ключевые слова magic
и test
(оба из них). Но есть некоторые вопросы:
magic
иtest
не может быть непрерывной один другой. Например,start magic word1 test word2 end
magic
иtest
может быть не в том порядке, в строке, т.е. совпадение должно быть дано дляstart magic test end
иstart test magic end
.
Чтобы справиться с этим, я принял следующее регулярное выражение:
start ((w1)*(w2)*\[^(end)])+end
... что означает:
- Строка должна начинаться со слова
start
и закончитьend
. - Матч
w1
иw2
в любом порядке и другие слова, которые не являютсяend
благодаря[^(end)]
. - Впоследствии конец матча.
Проблема с этим регулярным выражением является то, что все строки соответствуют его из-за [^(end)]
и мою потребность отбросить слова между w1
и w2
в реальной строке.
Ввод регулярного выражения для строки 1, это будет:
start ((magic)*(test)*[^(end)])+end
... который должен соответствовать только строке 1 (и это то, что я хочу). Но строка 2 также соответствует.
Есть ли какая-либо форма проверки, если группировка была согласована с двигателем регулярного выражения? Что-то вроде (if \1 != null)
, чтобы проверить, что magic
и test
ключевые слова были найдены? Я должен делать это с помощью регулярных выражений, потому что я не могу справиться с ним в исходном коде. Он предназначен для работы с инструментом, вызываемым командной строкой.
Повторное выражение, которое вы написали, делает что-то совершенно отличное от того, что вы думаете, что оно делает, и будет соответствовать только строкам, которые выглядят как 'start magic * test() n (ddn)) (dend' – user1937198