正则表达式-边界字符中的美元符号



在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);

有什么想法吗?非常感谢。

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

这里有一个替代方案,它使用查找作为单词边界的代理:

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

这里的逻辑是,我们检查美元符号两侧的空白或字符串的开始/结束。

最新更新