Eu estou tentando encontrar palavras com o primeiro caractere ($) usando o regex, mas não consegui fazê-lo funcionar. Eu tentei:
$string = "$David is the cool, but $John is not cool.";
preg_match("/b($w+)b/", $string, $matches);
Eu tentei escapar do $ mas ainda não funciona:
preg_match("/b($w+)b/", $string, $matches);
Eu gostaria de extrair [$ David, $ John].
Por favor ajude!
Respostas:
1 para resposta № 1b
não será compatível com um caractere que não seja uma palavra e $
(outro caractere não palavra).
b
é equivalente a
(?<!w)(?=w)|(?<=w)(?!w)
então você poderia usar
/(?<!w)($w+)b/
Dito isto, provavelmente não há razão para verificar o que é antes do $
, então o seguinte deve fazer:
/($w+)b/
Além disso, b
irá sempre corresponder, por isso pode ser deixado de fora.
/($w+)/
Além disso, você parece querer todas as correspondências. Para isso, você precisará usar preg_match_all
ao invés de preg_match
.
0 para resposta № 2
Como foi dito antes, não há necessidade de usar limite de palavra e não limite de palavra, mas para corresponder a variáveis, você tem que usar preg_match_all:
$string = "$David is the cool, but $John is not cool.";
preg_match_all("/($w+)/", $string, $matches);
print_r($matches);
Saída:
Array
(
[0] => Array
(
[0] => $David
[1] => $John
)
[1] => Array
(
[0] => $David
[1] => $John
)
)