2010-08-12 4 views
2

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

имя пользователя = asd123 password123

и так далее.

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

username=(.*) password 

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

+0

Вы избежали '['? –

+0

Как я могу избежать их, если я не знаю, что они придут? Пользовательские имена вводятся пользователями, поэтому я не знаю, что они заблаговременно. – Accatyyc

ответ

1

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

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

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

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

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

+0

Спасибо, я посмотрю на это. И это не зависит от меня, чтобы запретить скобки, эти имена пользователей существуют в течение многих лет, и скобки всегда разрешались, к сожалению :( – Accatyyc

+0

Возможно, вы захотите опубликовать немного больше кода, если это возможно. Кажется необычным, что '(. *) 'выражение здесь не соответствует, поэтому я бы определенно проверил, как вы анализируете файл и передаете строку в регулярное выражение. Это может быть проблема с тем, что сама строка неверна, когда вы сталкиваетесь с скобкой. – eldarerathis

1

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

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

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

+0

Нет .. [] - пустой класс символов. – jtbandes

+1

Этот подход не является ошибкой ... ']' после '[' известен как обычный символ в моем примере ... Итак, '[]' не интерпретируется как '[]' и это не пустой класс символов в моем регулярном выражении. вы можете прочитать больше информации по адресу: http://en.wikibooks.org/wiki/Regular_Expressions/Regular_Expression_Syntaxes –

Смежные вопросы