2015-01-20 3 views
0

имеетсхема цыпленка регулярное выражение логическая группировка

(use extras format posix posix-extras regex regex-literals utils srfi-1) 

имеет регулярное выражение с логическими группами 1 и 2

/^(\\W+)\\s+(\\W+)/ 

, но у меня возникают проблемы с синтаксисом на самом деле -use- 1 и 2. Должен ли я использовать $ 1 $ 2, или \ 1 и \ 2, или что-то еще? Я буду использовать 1 и 2 на том же LOC, что и само регулярное выражение.

Спасибо заранее,

Еще обучения Стив

ответ

0

Этот вопрос стар, и это не особенно ясно: вы не объясняют, как вы пытались использовать регулярное выражение. Я все равно попытаюсь ответить.

Прежде всего, нет «специальных» переменных $1 или $2 как в Perl или Ruby. С этой точки зрения становится простым вопросом, как использовать различные процедуры.

Например, с string-match, вы просто получите список совпадений:

#;1> (use regex regex-literals) 
#;2> (string-match #/b(a)(r)/ "bar") 
("bar" "a" "r") 

Таким образом, чтобы обратиться к дилям submatch вы бы использовать (list-ref the-match N) (где 0 равна полную найденную строка).

С string-substitute и при использовании обратных ссылок в регулярном выражении, вы будете использовать "\\1" (вы должны использовать два обратных слэша, чтобы избежать обратной косой черты в строковом контексте):

#;1> (use regex regex-literal) 
#;2> (string-substitute #/f(o)(\1)/ "lala\\2xyz" "foo") 
"lalaoxyz" 

Это работает вообще, но есть недокументированная функция (или, возможно, ошибка), что, если вы используете обратную косую черту перед escape-последовательностью в замене, она будет экранирована. См. this bugreport о том, как это работает, и как использовать нерегекс вместо яйца регулярных выражений для аовида этого.