Regex соответствует целым словам, начинающимся с $

Мне нужно регулярное выражение для соответствия целым словам, начинающимся с $. Что такое выражение и как его можно проверить?

Пример:

Это $word и $this необходимо извлечь.

В приведенном выше предложении $word и $this будут найдены.

Ответ 1

Если вы хотите совместить только целые слова, вам понадобится селектор символов

\B\$\w+

Это будет соответствовать $, за которым следует одна или несколько букв, цифр или подчеркивания. Попробуйте в Rubular

Ответ 2

\$(\w+) 

Объяснение:

\$: избегать специального символа $
(): зафиксировать совпадения здесь (по крайней мере в большинстве двигателей)
\w: соответствие a - z, a - z и 0 - 9_)
+: сопоставлять это количество раз

Ответ 3

Я думаю, вам нужно что-то вроде этого:

/(^\$|(?<=\s)\$\w+)/

Первые круглые скобки просто фиксируют ваш результат.

^\$соответствует началу всей строки, за которой следует знак доллара;

| дает вам выбор OR;

(? < =\s)\$является положительным взглядом, который проверяет, существует ли знак доллара\$с пространством за ним.

Наконец, (для повторения), если у нас есть строка, начинающаяся с $или $, предшествует пробел, тогда регулярное выражение проверяет, следует ли следовать одному или нескольким символам слов -\w +.

Это будет соответствовать:

$test one two three

и

one two three $test one two three

но не

one two three$test

Ответ 4

Для части тестирования вашего вопроса я могу порекомендовать вам использовать http://myregexp.com/

Ответ 5

Это должно быть самоочевидным:

\$\p{Alphabetic}[\p{Alphabetic}\p{Dash}\p{Quotation_Mark}]*(?<!\p{Dash})

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

Ответ 6

Попробуйте это как ваше регулярное выражение:

/ (\$\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