Php 正则表达式字符串结束问题
我想匹配字符串中的最后一个“order by”(例如,$matches[1]=doo.time),我可以看出问题出在Php 正则表达式字符串结束问题,php,regex,Php,Regex,我想匹配字符串中的最后一个“order by”(例如,$matches[1]=doo.time),我可以看出问题出在(.*)部分,但不确定要将其更改为什么,因为它需要任何字符,有什么想法吗 $sql = "SELECT foo FROM blah ORDER BY foo.date ORDER BY doo.time"; if (preg_match('/ORDER BY\s(.*)$/i', $sql, $matches)) { echo "<pre>"; pri
(.*)
部分,但不确定要将其更改为什么,因为它需要任何字符,有什么想法吗
$sql = "SELECT foo FROM blah ORDER BY foo.date ORDER BY doo.time";
if (preg_match('/ORDER BY\s(.*)$/i', $sql, $matches)) {
echo "<pre>";
print_r($matches); exit;
}
$sql=“按foo.date按doo.time从blah ORDER中选择foo”;
if(preg_match('/ORDER BY\s(.*)$/i',$sql,$matches)){
回声“;
打印($matches);退出;
}
如果只查找列名,请尝试以下操作:
$sql = "SELECT foo FROM blah ORDER BY foo.date ORDER BY doo.time";
if (preg_match('/(?:.*)ORDER BY\s(.*)$/i', $sql, $matches)) {
echo "<pre>";
print_r($matches); exit;
}
if(preg_match('/.*ORDER BY\s(.*?(:ASC | DESC)?\s*(?:LIMIT.*)$/i',$sql,$matches)){
回声“;
打印($matches);退出;
}
如果只查找列名,请尝试以下操作:
$sql = "SELECT foo FROM blah ORDER BY foo.date ORDER BY doo.time";
if (preg_match('/(?:.*)ORDER BY\s(.*)$/i', $sql, $matches)) {
echo "<pre>";
print_r($matches); exit;
}
if(preg_match('/.*ORDER BY\s(.*?(:ASC | DESC)?\s*(?:LIMIT.*)$/i',$sql,$matches)){
回声“;
打印($matches);退出;
}
您可以贪婪地匹配(无需捕获)之前的所有内容。这将强制模式的其余部分仅与上一个订单匹配。这对我有用
$sql=“按foo.date按doo.time从blah ORDER中选择foo”;
if(preg_match('/(?:*)ORDER BY\s(.*)$/i',$sql,$matches)){
回声“;
打印($matches);退出;
}
您可以贪婪地匹配(无需捕获)之前的所有内容。这将强制模式的其余部分仅与上一个订单匹配。这对我有用
$sql=“按foo.date按doo.time从blah ORDER中选择foo”;
if(preg_match('/(?:*)ORDER BY\s(.*)$/i',$sql,$matches)){
回声“;
打印($matches);退出;
}
@fire:order by是否有任何ASC
或DESC
关键字?@fire:order by是否有任何ASC
或DESC
关键字?如果regex对您不重要,您可以使用可能更快的strripos。如果regex对您不重要,您可以使用可能更快的strripos。(.*)$
也可以,而不是(.*?)$
@Tim:是的,谢谢。这是我以前用/orderby\s(.*)$/i
和/orderby\s(.*)$/iU(
(.*)$
做的实验留下的,它也可以代替(.*)$
。@Tim:是的,谢谢。这是我之前用/orderby\s(.*)$/i
和/orderby\s(.*)$/iU
进行的实验留下的。