Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_match_所有空匹配_Php_Regex - Fatal编程技术网

Php preg_match_所有空匹配

Php preg_match_所有空匹配,php,regex,Php,Regex,我想匹配两个美元符号之间的任何字母和下划线,并得到匹配结果 例如: 我得到,我想要url或$url$ 我尝试了以下两种模式 $pattern = "/\$([a-z\_]*)\$/i"; $pattern = "/\$(.*)\$/i"; // well, that's actually not what I want. preg_match_all($pattern, $line, $matches, PREG_PATTERN_ORDER); 好吧,这应该行得通——至少它在我身上行得通。但当

我想匹配两个美元符号之间的任何字母和下划线,并得到匹配结果

例如:

我得到
,我想要
url
$url$

我尝试了以下两种模式

$pattern = "/\$([a-z\_]*)\$/i";
$pattern = "/\$(.*)\$/i"; // well, that's actually not what I want.
preg_match_all($pattern, $line, $matches, PREG_PATTERN_ORDER);
好吧,这应该行得通——至少它在我身上行得通。但当我在我的应用程序中测试它时,它不会。我只是得到空的测试结果

array(2) { [0]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } [1]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } } 
// ...
有什么想法吗

下面是我用来测试它的示例文本(我每行测试一次)

  • 因为我对PHP不是很熟悉,所以我将发布我如何阅读的代码,以获得实际的字符串。也许我已经做错了什么

    $file = file($filename);
    
    for($i=0; $i<count($file); $i++){
        $line = $file[$i];
        preg_match_all("/\$([a-z]*)\$/i", $line, $matches);
        var_dump($matches);
        echo "<br/>";
    }
    
    $file=文件($filename);
    
    对于($i=0;$i在正则表达式周围使用单引号:

    preg_match_all( '/\$([a-z_]*)\$/i', $line, $matches );
    

    让PHP退出模式。通常在双引号字符串中转义
    \$
    就足够了,但当双引号字符串是正则表达式时显然不行。

    我认为问题不在于正则表达式,我在这里测试了@Upio,我也担心这一点。但老实说,我不知道会出现什么问题。
    preg_match_all( '/\$([a-z_]*)\$/i', $line, $matches );