2014-01-29 7 views
3

Я новичок в регулярных выражений, и я пытаюсь сломать регулярное выражение, так что я могу понять это лучше:Что означает регулярное выражение ( d {3}) (? = D)?

/(\d{3})(?=\d)/ 

Я понимаю, что (\d{3}) захватывает 3 цифры, но не уверены в том, что вторая часть пытается захватить ,

Что означает ?=?

+0

Вы можете проверить регулярное выражение [здесь] [1]. Это не настоящий ответ на то, что вы хотите, но все же полезно. [1]: http://regexpal.com/ – chillworld

ответ

7

(?=\d) является positive lookahead означает совпадение & убрать 3 цифры, за которыми следует цифра.

Так что-то подобное произойдет:

1234 => capture 123 
123a => no match 
+0

Спасибо за объяснение. Поэтому для кода типа: number.to_s.reverse.gsub (/ (\ d {3}) (? = \ D) /, '\ 1,') Это фиксирует все 3 цифры и гарантирует, что после него по крайней мере одна цифра. Если true, то sub в «,». Если вы не возражаете, можете ли вы объяснить «\ 1», я попробовал исследовать это в google, но объяснения были для меня трудными. – DHuang

+0

'\ 1' на самом деле обратная ссылка на захваченную группу # 1. Итак, '1234' станет' 123,4' – anubhava

2

(?=pat) - Положительное опережение утверждение: гарантирует, что следующие символы соответствуют погладить, но не включает в себя эти символы в согласованном тексте

/(\d{3})(?=\d)/ - Здесь (\d{3}) записывает 3 цифры, а затем цифру, но последняя цифра не должна быть записана в этой группе.

Look here, here и here

Надеется, что это поможет!

+0

Спасибо за объяснение и благодарю вас за то, что вы собрали для меня рубль :) – DHuang

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