正则表达式-边框字符内的美元符号

时间:2018-11-30 05:50:54

标签: php regex preg-match

在php中,我试图匹配两个连续的用边框字符包围的美元符号,但是我似乎无法弄清楚该模式。这是我要匹配的示例字符串:

$string = '$$';
$string = ' $$ ';
$string = "\n$$\n";

这是我尝试过的模式:

$pattern = '/\b\$\$\b/';     // First attempt at escaping dollar signs
$pattern = '/\b\\\$\\\$\b/'; // Maybe backslashes need to be escaped
$pattern = '/\b$$\b/';       // Maybe dollar signs shouldn't be escaped
$pattern = "/\b\$\$\b/";     // Maybe we need double quotes for special characters
$pattern = "/\b\\\$\\\$\b/"; // Double quotes and double-escaping

以上任何一种模式在运行时均不返回任何匹配项:

preg_match($pattern, $string);

有什么想法吗?谢谢。

1 个答案:

答案 0 :(得分:1)

在我发布此答案之前,OP和@JonStirling基本上都解决了这个问题。至少从正确转义美元符号的角度来看,您的第一个模式\b\$\$\b是正确的。问题在于单词边界主要处理单词和非单词之间的边界。由于美元符号不是文字字符,因此\b的行为并不理想。

这里是使用环视语言作为字边界的替代方法:

$string = ' $$';
$pattern = '/(?<=\s|^)\$\$(?=\s|$)/';
echo preg_match($pattern, $string, $match);

这里的逻辑是,我们在美元符号的两侧检查空格或字符串的开头/结尾。