RegexKitLite не соответствует квадратным скобкам - PullRequest
2 голосов
/ 12 августа 2010

Я пытаюсь сопоставить имена пользователей из файла.Это примерно так:

username = asd123 password123

и т. Д.

Я использую регулярное выражение:

username=(.*) password

Toполучить имя пользователя.Но это не совпадает, если имя пользователя будет сказать и [ers] или подобное.Это не будет соответствовать скобкам.Любое решение для этого?

Ответы [ 2 ]

1 голос
/ 12 августа 2010

Я бы, наверное, использовал регулярное выражение:

username=([a-zA-Z0-9\[\]]+) password

Или что-то подобное. Примечания относительно этого:

  • Если убрать скобки, вы получите буквальную скобку.
  • Пределы a-zA-Z0-9 соответствуют буквенно-цифровым символам (в соответствии с вашим примером, который был буквенно-цифровым). Так что это будет соответствовать любому буквенно-цифровому символу или скобкам.
  • Модификатор + гарантирует, что вы сопоставите хотя бы с одним символом . * ( Kleene star ) разрешит ноль повторений, что означает, что вы допустите пустую строку в качестве действительного имени пользователя.
  • Я не знаю, разрешает ли RegexKitLite классы POSIX. Если это так, вы можете использовать [:alnum:] вместо a-zA-Z0-9. Тот, который я дал выше, должен работать, если это не так.

В качестве альтернативы я бы запретил использование скобок в именах пользователей. Они на самом деле не нужны, ИМО.

1 голос
/ 12 августа 2010

Ваше регулярное выражение верно. Вместо этого вы можете попробовать это:

username=([][[:alpha:]]*) password

[][[:alpha:]] означает, что ] и [ и [:alpha:] содержатся в скобках.

...