2011-04-16 6 views
0

В чем разница между [0-9]{1,2} и ^[0-9]{1,2}$?Регулярные выражения

Если мы удалим ^ и $, что получилось бы в этом случае?

Спасибо.

+0

Матч начала и конца строки. Я думаю, что это объяснительно. –

+0

@webarto, это должно быть какое-то новое определение фразы «самоочевидное», о котором я раньше не знал :-) С извинениями перед великим Дугласом Адамсом за кражу его фразы. В символе '^' нет __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Само собой разумеется, как правило, означает, что он стоит отдельно, без каких-либо дополнительных вкладов. Это значительно отличается от того, чтобы искать тот факт, что '^' _means_ начинает строку. Обозначение _ характера может быть самоочевидным, но сам символ не является. IMNSHO :-) – paxdiablo

+0

@paxdiablo, спасибо за разъяснение, уважаю :) –

ответ

2

Эти символы называются привязки и привязаны к определенным позициям в строке. Если вы не обсуждаете многострочные регулярные выражения, они свяжутся с началом (для ^) и заканчивают (для $) строки.

Это означает, что ^[0-9]{1,2}$ - это строка, состоящая из ровно одной или двух цифр и ничего больше, в то время как [0-9]{1,2} - это строка любого размера, содержащая в себе одну или две последовательные цифры.

Итак, первый будет соответствовать 1, 77, 96, 42 и так далее. Последний будет также соответствует любому из них с любым количеством текста с обеих сторон, например paxdiablo is number 1, calling car 54, where are you и так далее.

Если ваш двигатель регулярных выражений способен обрабатывать многострочный ввод, значение обычно слегка изменяется. ^ будет связываться либо с началом строки, либо с нулевой точкой после символа конца строки. Аналогично, $ будет привязываться к концу строки и любой точке нулевой ширины до конца строки.

В таких случаях, если вы хотите соответствовать только началу или концу строки, вы, вероятно, найдете, что можете использовать \A и \Z.

+0

+1 Хороший ответ.Но есть одна деталь о '' 'вы вычеркнули: для многих/большинства ароматов регулярных выражений Perl (например, Perl, PHP, Python, но НЕ Javascript),' '' anchor будет соответствовать перед символом новой строки в конце строка, даже если многострочный режим выключен. Поэтому '^ [0-9] {1,2} $' будет соответствовать строке: '' 12 \ n "'. – ridgerunner

3

^ означает, что совпадение должно появиться в начале строки, а $ говорит, что оно должно совпадать с концом строки.

В вашем случае [0-9]{1,2} будет соответствовать любому числу с одной или двумя цифрами внутри любой строки (например, sakdj12lkjad92 будет соответствовать), в то время как последний будет соответствовать только в том случае, если строка содержит только одну или две цифры.

+0

Спасибо за ваш ответ. Таким образом, в случае '^ [0-9] {1,2} $' это означает, что он будет ** всего ** соответствовать строкам, которые выглядят следующим образом: * 1, 34, 56, 2, 10, .. .и т.д*? – Simplicity

+0

Это правильно. – halfdan

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