php变量问题

时间:2009-06-19 12:22:35

标签: php

是否可以使用某种类型的reg表达式或可能完成以下任务的其他类型的代码创建变量?

例如,var test = parta中的数据也可能等于partm。 注意我不想要一个数组...

我在sql搜索中使用它,但我有1000个不同的模型和系列,只想返回某些系列的模型而不返回类似于输入的系列......

是否有某些东西允许第五个字符成为所需字符的列表......?

另一个例子 我有模特

同一系列中的两个型号

515-n的

515米

不同系列的模型 1515

如果我正在搜索515系列,我不想返回1515 ......

请注意,这不是唯一的组合...因此无法将搜索指定为此...需要是通用结果。

5 个答案:

答案 0 :(得分:1)

通常,您将使用SQL LIKE语法在数据库中查找信息。我不确定你会使用PHP。如果您要搜索以515开头的所有型号,您可以使用以下内容:

SELECT * FROM `models` WHERE model_name LIKE '515%';

请注意,百分比仅在右侧,因此不会找到1515。

答案 1 :(得分:0)

preg_match('/\b515\b-?(?:n|m)/', $model)

一般地:

preg_match('/\b' . $model_number . '\b-?(?:' . join('|', $array_of_series_letters) . ')/', $model)

答案 2 :(得分:0)

您可以使用SQL通配符来匹配某些模式,但它远不如正则表达式那么灵活。以下是可用的通配符规则:

%    A substitute for zero or more characters

_    A substitute for exactly one character

[charlist]   Any single character in charlist

[^charlist]
or
[!charlist]  Any single character not in charlist

在您的示例中,您可以在SQL WHERE子句中使用以下任何一项:

WHERE model LIKE '515%' <--matches 515 followed by zero or more characters

WHERE model LIKE '515-[nm]' <--matches 515-n and 515-m only

WHERE model LIKE '515%[nm]' <--matches 515n and 515-m, also would match 515Qm

答案 3 :(得分:0)

如果可以,我总是建议避免使用正则表达式。在这种情况下,您可以轻松地获得该模型的模型和有效扩展。你只需要检查字符串是否以所需的模型字符串开头,并以任何一个有效的扩展名结束:

$string = '515-n';
$possibleExtensions = array('-n', 'm');
$model = '515';
$isDesiredModel = strpos($string, $model) === 0 &&
    in_array(substr($string, strlen($model)), $possibleExtensions);

答案 4 :(得分:0)

我认为这足以让(几乎)成为现实世界的解决方案:

function isModel($prefix,$input)
{
    return preg_match("/^" . $prefix . "\s*-?\s*?[nm]/", $input);
}

一些测试用例:

isModel('5155', '5155n'); // "1"
isModel('515','515-n'); // "1"
isModel('789','789 - m'); // "1"
isModel('111','111    -n'); // "1"