Мне нужно регулярное выражение для соответствия целым словам, начинающимся с $. Что такое выражение и как его можно проверить?
Пример:
Это $word и $this необходимо извлечь.
В приведенном выше предложении $word
и $this
будут найдены.
Мне нужно регулярное выражение для соответствия целым словам, начинающимся с $. Что такое выражение и как его можно проверить?
Пример:
Это $word и $this необходимо извлечь.
В приведенном выше предложении $word
и $this
будут найдены.
Если вы хотите совместить только целые слова, вам понадобится селектор символов
\B\$\w+
Это будет соответствовать $
, за которым следует одна или несколько букв, цифр или подчеркивания. Попробуйте в Rubular
\$(\w+)
Объяснение:
\$
: избегать специального символа $
()
: зафиксировать совпадения здесь (по крайней мере в большинстве двигателей) \w
: соответствие a - z
, a - z
и 0 - 9
(и _
) +
: сопоставлять это количество раз
Я думаю, вам нужно что-то вроде этого:
/(^\$|(?<=\s)\$\w+)/
Первые круглые скобки просто фиксируют ваш результат.
^\$соответствует началу всей строки, за которой следует знак доллара;
| дает вам выбор OR;
(? < =\s)\$является положительным взглядом, который проверяет, существует ли знак доллара\$с пространством за ним.
Наконец, (для повторения), если у нас есть строка, начинающаяся с $или $, предшествует пробел, тогда регулярное выражение проверяет, следует ли следовать одному или нескольким символам слов -\w +.
Это будет соответствовать:
$test one two three
и
one two three $test one two three
но не
one two three$test
Для части тестирования вашего вопроса я могу порекомендовать вам использовать http://myregexp.com/
Это должно быть самоочевидным:
\$\p{Alphabetic}[\p{Alphabetic}\p{Dash}\p{Quotation_Mark}]*(?<!\p{Dash})
Обратите внимание, что он не пытается сопоставить цифры или подчеркивания - это другие глупые вещи, которые у них нет в словах.
Попробуйте это как ваше регулярное выражение:
/ (\$\w+)/
\w+
означает "один или несколько символов слова". Это соответствует любому значению, начинающемуся с $, за которым следуют символы слова, но только если ему предшествует пробел.
Вы можете протестировать его с помощью perl (после того, как эхо просто сломать длинную строку):
> echo 'abc $def $ ghi $$jkl mnop' \
| perl -ne 'while (/ (\$\w+)/g) {print "$1\n";} '
$def
Если вы не используете пробел в регулярном выражении, вы будете соответствовать $jkl
в $$jkl
- не уверены, что это то, что вы хотите:
> echo 'abc $def $ ghi $$jkl mnop' \
| perl -ne 'while (/(\$\w+)/g) {print "$1\n";} '
$def
$jkl