2013-04-01 3 views
1

У меня есть строка что-то вроде:Рубин Regex GSUB - все после строки

test:awesome my search term with spaces 

И я хотел бы, чтобы извлечь строку сразу после test: в одну переменную и все остальное в другое, так что я бы конец с awesome в одной переменной и my search term with spaces в другой.

Логично, что бы я переместил все, что соответствует test:*, в другую переменную, а затем удалить все до первого :, оставив меня с тем, что я хотел.

В настоящее время я использую /test:(.*)([\s]+)/ для соответствия первой части, но я не могу получить вторую часть правильно.

+0

Я не знаю, если рубин регулярное выражение поддерживает Двойник позади. попробуйте этот '(? <= test:) (\ S *) (\ s +) (. *)' поэтому group1 является 'awesome', group3 является остальным текстом – Kent

+0

Если вы никогда не использовали rubular, вам это вполне понравится. http://rubular.com/r/lVg99vlTCE – kwarrick

+0

Спасибо, я просто тестировал его. – Alfo

ответ

4

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

matches = string.match(/test:(\S*) (.*)/) 
# index 0 is the whole pattern that was matched 
first = matches[1] # this is the first() group 
second = matches[2] # and the second() group 
+0

Как бы это использовать, чтобы поместить совпадения в переменные? – Alfo

3

Используйте следующее:

/^test:(.*?) (.*)$/ 

То есть, матча "test:", то последовательность символов (не жадность), до одного места, и другой последовательности символов до конца строки.

+0

Как я мог бы использовать это, чтобы поместить совпадения в переменные? Извините за вопрос n00bish - добравшись до Ruby от PHP и просто найдя свой путь. – Alfo

0

Я предполагаю, что вы хотите, чтобы удалить все начальные пробелы перед вторым матчем тоже, а значит у меня есть \ S + в выражении. В противном случае, удалите \ S + из выражения, и вы будете иметь то, что вы хотите:

m = /^test:(\w+)\s+(.*)/.match("test:awesome my search term with spaces") 
a = m[1] 
b = m[2] 

http://codepad.org/JzuNQxBN

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