2013-09-10 4 views
0

Учитывая некоторую строку originalString = "#SomeWord# More words", я хочу иметь возможность получить подстроку "SomeWord" от originalString.Perl Regex для получения подстроки между двумя одинаковыми символами

+0

так что вы просто хотите, чтобы строка была ограничена метками хэша? – andi

+0

'qr! [#] ([^ #] *) [#]!' – abiessu

ответ

2

/#([^#]+)#/ работает для меня.

Некоторые синтаксические примечания:

  • // разделителей символы, обозначающие начало и конец регулярного выражения
  • # буквальным хэш класс знак
  • [] персонаж

Объяснение выше регулярное выражение :

  • [^#] любой символ, который не является диеза
  • [^#]+ один или несколько таких символов
  • ([^#]+)capturing group вышеуказанного

В этом случае регулярное выражение ищет любые непредставленных символы # между двумя #. Вот полный пример:

my $foo = "#SomeWord# More words"; 

if ($foo =~ /#([^#]+)#/) { 
    print "$1\n"; 
} else { 
    print "no match\n"; 
} 
+0

спасибо, как шарм –

+1

Обратите внимание, что это регулярное выражение не будет ловить '##', но это может быть предполагаемое поведение. – abiessu

3
my $substr = (split /#/, $originalString)[1]; 
+0

Я получаю синтаксическую ошибку. Однако я на версии 5.14.2. –

+0

@DavidKnipe можете ли вы скопировать/вставить какую ошибку вы получили? –

+0

False alarm. При ближайшем рассмотрении выясняется, что я испортил правила ассоциативности Perl. Я имел 'print (split/# /, $ originalString) [1];'. –

1

Вы также можете использовать регулярные выражения:

$originalString=~ /\#([^#]+)\#/; 
# Now $1 holds your required string 
Смежные вопросы