Использование регулярного выражения Perl или unix, как бы захватить слово, которое не является диапазоном значений. Вот чего я пытаюсь достичь.Как я могу совместить слова, которые не являются определенными словами?
(\w:not('int','long'))
Использование регулярного выражения Perl или unix, как бы захватить слово, которое не является диапазоном значений. Вот чего я пытаюсь достичь.Как я могу совместить слова, которые не являются определенными словами?
(\w:not('int','long'))
Не уверен, если это верно синтаксис Perl, но в «общий» аромат вы можете сказать
/\b(?!int\b|long\b)\w+\b/
Если вы хотите, чтобы захватить слово, поставить скобки вокруг \w+
, как это
/\b(?!int\b|long\b)(\w+)\b/
Вот что я бы сделал. –
@Adam: вам не нужно '(\ w +)', чтобы захватить то, что мы хотим найти? Или я смущен? (I.e., вам нужны парнеры, чтобы иметь доступный предмет в '$ 1', нет?) – Telemachus
@Telemachus: Ой, вы правы! Мне нужно больше кофе. Я читал «матч», где письма четко пишут «захват». –
это, как правило, быстрее сказать:
my %exclude = map { $_ => 1 } qw/int long/;
my @words = grep { not exists $exclude{$_} } /(?:\b|^) (\w+) (?:\b|$)/gx;
особенно в версиях Perl до 5.10 (когда чередование получило значительное увеличение скорости).
Красивый подход. Тщательно общий :) –
На всякий случай, когда вы говорите 'int' и 'long', вы имеете в виду строки * 'int' и 'long', или вы имеете в виду переменные типы (как в C)? Я уверен, что вы имеете в виду строки, но на всякий случай ... – Telemachus
, так что не лучше ли говорить о наборах, а не о диапазонах? – innaM
Да, я имею в виду строки :) – Ryall