好的,我有两个这样的表格:
$sub = '
Some text....
<form class="form-search" method="post" action="/index.php">
<div class="form-group">
<input id="address_box" type="text" class="form-control" name="x" value="" onfocus="this.select()" />
</div>
<span class="btn btn-s btn-caps"><input type="submit" value="start" /></span>
</form>
Some text....
<form class="form-search" method="post" action="/home.php">
<div class="form-group">
<input id="address_box" type="text" class="form-control" name="y" value="" onfocus="this.select()" />
</div>
<span class="btn btn-s btn-caps"><input type="submit" value="start" /></span>
</form>
Some text....
';
我想:
Preg_match:
START = <form
WHERE action CONTAIN /index.php
EX: action="/index.php" or action="http://whatever.com/index.php"
FIND name="[A-Za-z]{1}"
END = </form>
Then Output the [A-Za-z]{1} Match
现在这是我的代码:
$pat = '/<form.*(?<=action=\")?\/index.php\">.*(?<=name=\")([A-Za-z]{1})(?=\").*?<\/form>/s';
preg_match($pat,$sub,$match);
print_r($match[1]);
这应该选择第一个表格并输出= x
但我得到输出= y(最后一个)
如果我只有1个表单,我的正则表达式正常工作,但如果我有2个表单或更多,它总是跳过所有表格并匹配最后一个表格,这是完全错误的。
有什么问题?
感谢。
答案 0 :(得分:0)
您可以将正则表达式更改为以下内容:
$pat = '~<form[^>]+action="[^"]*/(?:index.php)"[^>]*>(?!.*<form).*name="([a-zA-Z]{1})".*?</form>~s';
preg_match($pat,$sub,$match);
print_r($match[1]);