2009-07-23 2 views
2

У меня есть строки вроде следующим образом:Non жадный LookAhead

val:key 

я могу захватить 'Вэл' с /^\w*/.

Как я могу получить «ключ» без знак ':'?

Thanks

+1

В зависимости от используемого языка должна быть какая-то команда split() для разделения строк. Просто разделите «:», затем получите последний элемент. Нет необходимости в регулярном выражении. – ghostdog74

+0

Мне не хватает простейшего решения! Кстати, ключ может содержать ':'. – pistacchio

+1

Значит, вы хотите, чтобы он разделился на первый двоеточие? Используйте ограничение на фрагмент: 'split (/: /, $ text, 2)' –

ответ

4

Как насчет этого?

/^(\w+):(\w+)$/ 

Или если вы просто хотите, чтобы захватить все, что после двоеточия:

/:(.+)/ 

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

/(?<=:).*/ 
+0

Я бы хотел записать его с другим регулярным выражением и /\:(.*)/, все еще захватывая ':' – pistacchio

+0

, но круглые скобки будут разрешить выгрузку –

0
/\:(\w*)/ 

Это выглядит как: а затем захватывает все символы слова после него до конца строки

1

Какой язык вы используете? /:(.*)/ не захват от ":" но это делает матч символ ':'

В Perl, если вы говорите:

$text =~ /\:(.*)/; 
$capture = $1; 
$match = $&; 

Тогда $ захват выиграл» t имеют совпадения «:» и «$». (Но старайтесь избегать использования $ &, поскольку он замедляет работу Perl: это было просто для иллюстрации соответствия).

1

Это захватит ключ в группе 1 и значение в группе 2. Он должен работать корректно, даже если значение вызывает символ двоеточия (:).

^(\w+?):(.*) 
Смежные вопросы