Регулярное выражение для соответствия тексту внутри: - - PullRequest
0 голосов
/ 30 июня 2011

Я строю проект, который должен соответствовать тексту, который находится внутри : text to match -.Например, если у меня есть эта строка:

nathanpc / ltweet: Задать вопрос в #StackOverflow: «Регулярное выражение для соответствия тексту внутри: -» - @ devs

Я хочу соответствовать Asking a question at #StackOverflow: "Regular Expression To Match a Text Inside : -".Все, что после первого : и последнего -, но какое правильное регулярное выражение используется для этого?

PS: я использую Javascript с jQuery

Ответы [ 4 ]

2 голосов
/ 30 июня 2011

Если вы используете Perl-совместимые регулярные выражения, подобные тем, которые встречаются в большинстве языков:

/:(.*)-/

В зависимости от языка косые черты могут не понадобиться.Группа захвата 1 получит нужный вам контент.

.* является жадным сопоставителем, поэтому он будет пытаться сопоставить максимально возможное количество символов, вплоть до последней черты на входе.

1 голос
/ 30 июня 2011

Это работает для меня (рубин): ​​

[^:]+:\s+([^-]+.*?)\s-

Тест:

 test = "nathanpc/ltweet: Asking a question at #StackOverflow: 'Regular Expression To Match a Text Inside : -' - @devs"

 m = test.match /[^:]+:\s+([^-]+.*?)\s-/

Затем

 m[1].to_s

производит

Asking a question at #StackOverflow: 'Regular Expression To Match a Text Inside : -'

Как заметили другие, гораздо более простой :(.*)- работает так же.Возможно без пробелов :\s(.*)\s-

1 голос
/ 30 июня 2011

Если вы используете жадный оператор, такой как ., он попытается сформировать максимально возможное совпадение (по крайней мере, в Perl-совместимых механизмах регулярных выражений)

Таким образом, чтобы сопоставить это с чем-то простым, :(.*)- будет работать.

Смотрите этот пример скрипта на Perl:

my $str = "Discard:Testing:- one two three -discard";
$str =~ m/:(.*)-/;
print $1;

$1 = "Testing:- one two three"

Или в javascript здесь: http://www.regular -expressions.info / javascriptexample.html

0 голосов
/ 30 июня 2011

«Стандартные» регулярные выражения не могут анализировать этот текст в точности так, как вы описали. Этот синтаксический анализ требует некоторого context , который не может быть выражен с помощью регулярных выражений. Например, при получении первого «-», как выражение не заканчивается?

Из головы я могу прийти только с расширенными регулярными выражениями Perl, которые разрешают синтаксический анализ подвыражений, но это будет нелегко, так как вам нужно посчитать вхождения «:» и «-», чтобы соответствовать точно последний.

...