正则表达式以开头而不是结束

时间:2014-04-17 06:40:14

标签: php regex

我想检查一个字符串,如果它以美元($)和开括号({)开头,后跟任何但不以结束括号(})结束。

{$this should match {$this shouldn't march}

我试过以下:

$regex = '/(^\{\$).*?(?!\\})$/';

这是正确的方法吗?

2 个答案:

答案 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);
?>