2012-04-27 3 views
1

как захватить имя пользователя с RE? Например:grab username with regexp

мне нужно, чтобы захватить john_smith я попробовал этот [ \t]+(User)?[: \t]*([.]+) , но не может получить его работу. Может ли кто-нибудь помочь?

+0

Можете ли вы уточнить, какие формы допускаются для ввода? (Ваш RE требует, чтобы он начинался с одного или нескольких пробелов или вкладок, но ни один из ваших примеров не выглядит.) –

ответ

1

Try без ведущего [ \t]+, что означает 'по крайней мере один'. Или используйте [ \t]*, что означает «сколько угодно, может быть, ноль».

Слово «Пользователь» не выглядит необязательным, поэтому продолжайте работу с User[: \t]*. Точка - Джокер и соответствует каждому персонажу.

Поэтому не имеет смысла включать его в группу. Остальная часть группы становится бессмысленной, и она ничего не добавляет к точке. Поэтому точка в группе означает буквальную точку. Вместо этого используйте только точку: (.+)

[ \t]*User[: \t]*(.+) 
+0

Это отлично работает, кроме одного. Если у меня есть 'User: john_smith.Some text' , то он возвращает' john_smith.Some text', мне нужно только 'john_smith' –

+0

Тогда вам нужно определить, что может прервать имя. Точка кажется разумной, но, с другой стороны, подчеркивание тоже может быть. Если имена пользователей - это просто a-zA-Z0-9 и подчеркивание, тогда '[\ t] * Пользователь [: \ t] * ([a-zA-Z0-9 _] +)' решает вашу задачу. Может быть, немного улучшилось: '[\ t] * Пользователь:? [\ T] * ([a-zA-Z0-9 _] +)'. Если только буквальная точка может прервать имя, отрицательная группа сделает это: '[\ t] * Пользователь:? [\ T] * ([^.] +)'. –

+0

Спасибо, это помогло отлично. –

3

Попробуйте что-то вроде этого:

/User:?\s*(\S+)/ 

В postrgres, было бы что-то вроде этого:

substring('User: john_smith' from 'User:?\s*(\S+)') 
+0

Мне нужно сделать это в Postgre sql, как это SUBSTRING ('Пользователь: john_smith', 'Пользователь: ? \ s * (\ S +) '), –

+0

Я добавил пример, который я построил с помощью [postgresql документации по регулярным выражениям] (http://www.postgresql.org/docs/9.0/static/functions-matching.html) , – gpojd