2013-05-10 4 views
0

Мне нужно найти все слова в предложении, которые находятся между $ и пробелом, подобным этому это $ abc $ cde any $ ety.Найти регулярное выражение между строкой и пробелом

Результат должен быть abc, cde и ety.

Я попробовал этот

'(?<=$$)(.*)(?=)' 

но он показывает некоторые ошибки. Что не так в этом или каких-либо новых предложениях?

+0

Я понимаю, что есть место после этого. Предполагаю, что вы хотите '(? <= \ $) (. *?) (? = \ S)' –

+0

'/ \ $ (\ w +) \ b /'. Что вам не хватает, так это граница слов, это не всегда пространство. – 2013-05-10 10:21:11

ответ

1

Вы можете попробовать это:

\$(\w+) 

Как захватывая группы, вы получите каждое из слов.

\w будет соответствовать Az, 0-9 и _, если вы хотите, чтобы соответствовать только буквы, например, вы можете изменить: \$([a-zA-Z]+)

+0

'\ w' также будет включать' 0-9' и '_' – Bill

+1

Я знаю, я выбрал \ w, так как я не знаю домена слов, которые должны быть сопоставлены, это просто вопрос переключения. - Отредактировано, чтобы сделать это очевидным. – pcalcao

0

Предполагая, что от вопроса, каждое слово (слово содержит только символы A- Za-z) должен начинаться с $ и иметь место в конце. Следующее regex будет соответствовать таким словам - \$([A-Za-z])+ (в конце есть пробел, который трудно увидеть из-за форматирования). Если есть несколько пробелов, вы можете использовать + (пробел перед +, который трудно увидеть снова из-за форматирования) в конце регулярного выражения.

Затем вы можете извлечь первую подходящую группу (то есть $1) в качестве подходящего слова, и вам нужно сделать это в цикле, пока не будет больше совпадений, которые вы можете извлечь. Это что-то вроде -

while ($x =~ /\$([A-Za-z])+ /g) { 
    // $1 is your match 
} 

Если слово содержит больше, чем просто символов, то вы можете использовать \w как уже упоминалось pcalcao, который будет включать в себя как 0-9 и _