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

regular expression - dollar signs within border characters

在 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

None 以上模式 return 的任何匹配 运行:

preg_match($pattern, $string);

有什么想法吗?谢谢。

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

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

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

这里的逻辑是我们检查美元符号两边的空格或字符串的 start/end。