2015-05-12 8 views
0

(^.)(\w+)(.$) $2 удаляет первый и последний символ, но я не уверен, как это работает.

Мое понимание: (. ^)

соответствует любому одному символу в начале строки. (. $) Соответствуют любому символу в конце строки. (\ W +) любого символа слова (требуется, по крайней мере один символ) $ 2 называет вторую круглые скобки (\ W +)

Test1:

Input: 91239 

Output: 123 

test2:

Input: \123\ 

Output: 123 

Почему он удаляет обратную косую черту? Является ли это приемлемым способом удаления обратной косой черты (начало и конец строки)?

Test3:

Input: /123/5 

Output: /123/5 

Я здесь потерял. Почему это не работает для/123/5.

Спасибо!

+1

'\ w' соответствует буквенно-цифровому или подчеркиванию, а не косые черты – Jonesopolis

+0

Да, это то, что я думал, но он удалил обратную косую черту. Я не знаю, почему – Michael

+0

Ваша команда, по-видимому, заменяет '(^.) (\ W +) (. $)' На '$ 2' - содержимое среднего набора парен. –

ответ

2

Почему он удаляет обратную косую черту? Является ли это приемлемым способом удаления обратной косой черты (начало и конец строки)?

Он удаляет обратный слэш, потому что . соответствует любому символу, включая \. Группа 1 - это первая обратная косая черта, группа 2 - каждый символ, но первая и последняя, ​​группа 3 - последняя обратная косая черта.

Я потерян здесь. Почему это не работает для/123/5.

\w соответствует 0-9, a-z, A-Z и _. \w+ потребляет 123. Следующие . потребляет /. Следующие $ не соответствуют остальным 5, таким образом, нет совпадений с этим вводом.

+0

Спасибо. Теперь, если я хочу только удалить первую и последнюю обратную косую черту, то, как выглядит регулярный экспресс? (^ \\) (\ w +) ((\\ $) $ 2? – Michael

+0

Это должно быть что-то вроде '(^ \\) (\ w +) (\\ $)' (с '' '\\' '' в фронт) –

+0

Еще раз спасибо !!!! – Michael

1

Почему это не работает/123/5.

\w эквивалентно [a-zA-Z0-9_] и . соответствует любому символу .. поэтому в /123/5 ../ перед тем 1 сочетается с ^. и 5 сочетается с .$ но 123/ не соответствует, поскольку / не соответствует по \w

Regex (^.)(\w+)(.$) средства (Пояснение):

  • (^.) начать с любым символом (скобки => группа захвата 1)
  • (\w+), за которым следует более одного (+) символов в наборах [a-zA-Z0-9_] (скобка => захват группа 2)
  • (.$) конец с любым символом (скобкой => захват группа 3)

И, наконец $2 означает для захвата обратной ссылки группы 2 .. т.е. группы захваченной шаблоном (\w+).

+0

Спасибо, поэтому (^ \\) (\ w +) (\\ $) $ 2 означает, что линия начинается с \ и заканчивается на \, а затем фиксирует среднюю часть, если она содержит только [a-zA-Z0-9_]. Правильно? – Michael

+0

@ Майкл Да .. но это должно быть '(^ \\) (\ w +) (\\ $) $ 2' .. с '' '\\' '' спереди, иначе вы будете избегать скобки. –

+0

'$ 2' не означает * группа захвата 2 *, но * back-reference * в группу захвата 2. Группа захвата 2 является '(\ w +)'. @Michael, похоже, вы меняете свое регулярное выражение от комментария к комментарию: '$' - конец строки/строки, а '\ $' - символ * literal * '$. Пожалуйста, добавьте свои критерии в вопрос, чтобы получить ясный и полезный ответ. –

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