Шаблон RegEx, который соответствует всем возможным вариантам шаблона регулярных выражений, который соответствует шаблону - PullRequest
2 голосов
/ 19 сентября 2019

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

^\/\[(A\-Z|a\-z|0\-9){1}(?!\1)(A\-Z|a\-z|0\-9){1}(?!\2)(A\-Z|a\-z|0\-9){1}\]\/

И без диапазонов символов только буквенные символы в случае, если они не используютэто правильный путь.

^\/\[(abcdefghijklmnopqrstuvwxyz|0123456789|ABCDEFGHIJKLMNOPQRSTUVWXYZ){1}(?!\1)(abcdefghijklmnopqrstuvwxyz|0123456789|ABCDEFGHIJKLMNOPQRSTUVWXYZ){1}(?!\2)(abcdefghijklmnopqrstuvwxyz|0123456789|ABCDEFGHIJKLMNOPQRSTUVWXYZ){1}\]\/

У меня есть chal CTF, у которого есть класс, пишущий шаблон регулярного выражения, который соответствует буквенно-цифровой строке.Я понимаю, что полные символы не нужны, но я не хочу, чтобы они терпели неудачу, если они не сразу думают о диапазонах символов.Я запускал его вручную с помощью sed в расширенном режиме и выполнял регулярное выражение в сети, но я беспокоюсь, что мог что-то пропустить.

Второй шаблон регулярного выражения - это второй флаг, если они не используют диапазоны символов.

И это не вопрос стиля "Code Golf", или, по крайней мере, для меня это не так.У меня есть шаблон, который мне просто нужен, чтобы убедиться, что нет странного неясного трюка с регулярным выражением, который мог бы создать действительный шаблон регулярного выражения, который выполняет то, что я им сказал, что я не описал в предыдущих двух шаблонах.

IДолжен сказать, что я добавил дополнительный шаблон регулярных выражений (поскольку CTFd допускает несколько), который соответствует \ w \ d в любом порядке.

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Ваше регулярное выражение соответствует только: /[A-Za-z0-9]/ без якорей и квантификаторов. Я предлагаю вам:

^\/\^?(?:\[(A-Z|a-z|0-9)(?!\1)(A-Z|a-z|0-9)(?!\1)(?!\2)(A-Z|a-z|0-9)\]|\[\^\\W_])[+*?]?\$?\/

, который соответствует буквенно-цифровым регулярным выражениям с дополнительными якорями и дополнительными квантификаторами, также соответствует короткому регулярному выражению /[^\W_]/, котороеозначает то же самое (т. е. не не слова и не подчеркивание)

/[A-Za-z0-9]/
/[A-Za-z0-9]+/
/[A-Za-z0-9]*/
/^[A-Za-z0-9]/
/[A-Za-z0-9]$/
/^[A-Za-z0-9]+$/
/^[A-Za-z0-9]*$/
/^[A-Za-z0-9]?$/
/^[^\W_]+$/

Демо

1 голос
/ 19 сентября 2019

Я предполагаю, что, возможно, вы пытаетесь написать выражение, похожее на:

^\/\[([A-Za-z0-9])(?!\1)([A-Za-z0-9])(?!\2)([A-Za-z0-9])\]\/

Демонстрация


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


RegEx Circuit

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

enter image description here

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