我想检查一个字符串,如果它以美元($
)和开括号({
)开头,后跟任何但不以结束括号(}
)结束。
{$this should match {$this shouldn't march}
我试过以下:
$regex = '/(^\{\$).*?(?!\\})$/';
这是正确的方法吗?
答案 0 :(得分:1)
你的问题并不完全清楚。好的,根本不清楚。
$regex = '/(^\{\$).*?(?!\\})$/';
|
double escaping, why?
lookaround assertion正在检查模式中某个位置的条件。 (?!\})$
检查位置(?!\})
是否为真且 $
为真。
这两个条件在字符串末尾始终为true! ==>你没有检查字符串是否以}
结尾:
anchor $
为真,如果字符串的结尾位于前方,则同一位置(?!\})
也是如此,因为前面没有}
。
要测试这种情况,你需要回顾,找到$
==>
(?<!\})$
答案 1 :(得分:0)
我猜测你的例子是两个独立的例子,其中一个应该匹配,其中一个不匹配。以下regex
可能会达到您想要的效果。
<?php
$input1 = '{$this should match' ;
$input2 = '{$this shouldn\'t march}';
$regex = '/^{\$[^{}]+(?!})$/';
preg_match_all($regex, $input1, $matches); // Will match
var_dump($matches);
preg_match_all($regex, $input2, $matches); // Will not match
var_dump($matches);
?>