我希望在两个美元符号之间匹配任何字母和下划线,并得到匹配结果。
示例:
我得到<a href="$url$">foo</a>
,我希望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);
好的,这应该有用 - 至少它在regex101上有效。但是,当我在我的应用程序中测试它时,它不会。我只是得到空的测试结果
array(2) { [0]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } [1]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } }
// ...
有什么想法吗?
以下是我用来测试它的示例文本(我每行测试一次)
<li>
<div class="parent">
<a href="$application_url$">
<img preview_image src="$thumbnail$">
<div class="battle_tag">$btag$</div>
<div class="class_spec">$spec_one$ / $spec_two$ $class$</div>
<div class="item_lvl">ilvl $ilvl$</div>
<div class="date">$obtained$</div>
</a>
</div>
</li>
好吧,因为我对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/>";
}
答案 0 :(得分:2)
在正则表达式周围使用单引号:
preg_match_all('/\$([a-z]*)\$/i', $line, $matches);
也许更好:
preg_match_all('/\$([^\$]+)\$/i', $line, $matches);
单引号将PHP从变量插值模式中取出。通常在双引号字符串中转义$
就足够了,但显然不是双引号字符串是正则表达式时。