2009-04-29 4 views
1

Что оценивает регулярное выражение $$?

+0

Звучит как домашнее задание для меня ... – Tomalak

+1

Какой ты вариант, о котором вы говорите? – Cerebrus

+0

Я думаю, что он означает POSIX. Теперь мне любопытно и копать, хотя posix regex, чтобы увидеть, как POSIXALLY_CORRECT может повлиять на него. Я подозреваю, что regcomp будет соответствовать буквальному $, за которым следует конец строки, в зависимости от этой переменной окружения. –

ответ

2

Это зависит только от основного двигателя регулярных выражений. Например, в vim он будет соответствовать знаку доллара в конце строки. Я предполагаю, что Posix потребует, чтобы движок соответствовал тому же, что и «$», поскольку этот литерал имеет длину 0, как указал Томалак.

+0

Я не знал, что vim будет делать это ... +1 – Tomalak

+0

Только $ в конце регулярного выражения ведет себя по-разному в vim, каждый другой $ соответствует знаку доллара. – soulmerge

1

Это зависит от основного двигателя регулярных выражений. Но в .Net Framework System.Text.RegularExpressions.Regex class, $ в регулярных выражениях указывает, что совпадение должно происходить в конце строки, перед \ n в конце строки или в конце строки, так что $$ будет соответствовать всем!

($$ имеет другой смысл в шаблонах замены, который заменяет один «$» буквальные.)

+0

«$$» будет соответствовать всем, с точки зрения «каждого символа в строке»? Ты уверен? – Tomalak

+0

«$$» будет соответствовать всем, с точки зрения «каждой строки». // Возвращаемое значение true для любого заданного текста private static bool IsMatch (текст строки) { Возвращает новый System.Text.RegularExpressions.Regex ("$$"). IsMatch (текст); } – CSharper

+0

Хм ... Когда вы смотрите на это так, это правда. Вы сделали это так, как будто это было особенное свойство «$$», но оно одинаково верно для «^» или «$» или «. *». Ключевой вопрос остается без ответа - что он * соответствует *? – Tomalak

-1

Обычно это согласовань для отслуживших линии, но это зависит, на каком языке вы используете. Без этой конкретной информации трудно ответить.

BTW, в csh означает номер процесса. Это не регулярное выражение.

Луис

+0

Не знал, что csh был движком регулярных выражений ... – soulmerge

2

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

3

в Perl, вложение $$ в регулярное выражение приведет к PID процесса Perl вставляется

# Suppose perl has a PID of 5432 
my $str1 = "some"; 
my $str2 = "5432"; 

print "1 match: $str1" if $str1 =~ /^$$/; 
print "2 match: $str2" if $str2 =~ /^$$/; 

Выход:

2 match: 5432 

Вставка одной $ будет соответствовать конец строки ,

2

Это зависит от языка программирования и регулярного выражения.

  • В Perl /$$/ соответствует PID (идентификатор процесса) текущего процесса (см. Больше в ответе dsm).
  • В Ruby оба /$$/ и /$/ соответствуют пустой строке перед первой новой строкой, или конец строки, если в строке нет строк новой строки.
  • В Python оба re.search('$$', s) и re.search('$', s) соответствуют пустой строке перед последней новой строкой или в конце строки, если в строке нет строк новой строки.
  • (другие языки или регулярные выражения двигателей могут вести себя по-разному.)

Пожалуйста, обратите внимание, что флаги (обычно s и m флагов), связанные с регулярным выражением влияют какие $ матчей. В приведенных выше элементах используются флаги по умолчанию.

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