在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);
有什么想法吗?谢谢。
答案 0 :(得分:1)
在我发布此答案之前,OP和@JonStirling基本上都解决了这个问题。至少从正确转义美元符号的角度来看,您的第一个模式\b\$\$\b
是正确的。问题在于单词边界主要处理单词和非单词之间的边界。由于美元符号不是文字字符,因此\b
的行为并不理想。
这里是使用环视语言作为字边界的替代方法:
$string = ' $$';
$pattern = '/(?<=\s|^)\$\$(?=\s|$)/';
echo preg_match($pattern, $string, $match);
这里的逻辑是,我们在美元符号的两侧检查空格或字符串的开头/结尾。