我在if语句中遇到了一些问题,它检查字符串是否以“address”结尾。
例如,这匹配user_address
,user_address1
,user_address99
等。这是正确的。
问题是它也匹配user_address_location
,这是不正确的。
我只想在以下情况下匹配:
/* Only establish an address field as ADDRESS if follows "user_address1" format */
if((stristr($column,"address") !== false)) {
$parts = explode("_", $column);
if (!empty($parts)) {
// address code
}
}
答案 0 :(得分:4)
这可能是使用正则表达式的好地方
if(preg_match('/^user_addesss\d*$/', $column) === 1){
}
答案 1 :(得分:1)
使用正则表达式:
if(preg_match('/_address(\d+)?$/', $column))
{
}
如果您正在进行大量字符串比较和操作,那么此Web应用程序对您非常有用:http://gskinner.com/RegExr/
它允许您针对内容开发正则表达式,并提供有关匹配和替换的实时反馈。
答案 2 :(得分:1)
您可以在此处使用$
正则表达式。使用正则表达式时$
指定字符串的结尾
因此,您可以搜索此正则表达式:
$regexp = "^.*_address\d+$";
^
是开始,.*
表示任意数量的任何字符_address
是您要搜索的内容,\d+
表示它可以在地址后面有数字,并且$
表示字符串结束。
您可以阅读有关正则表达式的更多信息,以及php.net上的preg_match
答案 3 :(得分:0)
将if((stristr($column,"address") !== false)) {
更改为if(preg_match("/^user_address[0-9]*/", $column) == 1) {
答案 4 :(得分:0)
我想找到一种没有正则表达式的方法,对不起,我应该在问题中明确说明。
但我认为我找到了一种方法,不确定它是否可以改进或与正则表达式相比性能。
/* First establish it could be an address field e.g "user_address1" format */
$column_address = strpos($column, "_address");
if($column_address !== false) {
// remove everything before "_address"
$last = substr($column, $column_address);
// Check if "_address" OR remove "_address" and check if int
if($last == "_address" || intval(substr($last, 8))){