PHP - 检查字符串是否与pattern类似

时间:2014-03-02 16:34:58

标签: php regex

在PHP中有levenshtein - 方法,对吧?

有了它,你可以检查两个字符串的相似程度。

但有没有一种方法可以让你有一个与字符串比较的模式(regEx)?

因此,假设你有这样的模式:L234X567PP所有数字都是可变的。只有字母必须在那里(并且位于完全相同的位置)

所以现在你有一些字符串: L000X000PP L987X123PP 那些应该是有效的。

B000X678XX 这是无效的,但levenshtein检测到相似性,可能会要求更正错误的字母(可能吗?)

你如何用PHP做到这一点?

3 个答案:

答案 0 :(得分:2)

一个有趣的概念,但为什么不尝试这个?

if( preg_match("/^L\d{3}X\d{3}PP$/",$input)) { /* all ok! */ }
elseif( preg_match("/^[A-Z]\d{3}[A-Z]\d{3}[A-Z][A-Z]$/i",$input)) { /* letters were wrong */ }
// ... continue defining possible errors manually

答案 1 :(得分:1)

是的,您可以使用PHP执行此操作。以下是您将用于指定模式的正则表达式:

$regex = '/^L[0-9]{3}X[0-9]{3}PP$/';
$input = 'L000X000PP';
if (preg_match($regex, $input) == 1) {
    echo "Matches!";
} else {
    echo "Does Not Match!"
}

答案 2 :(得分:1)

这是soundex function介入的地方。请参阅此代码段:

$str1 = "L000X000PP";
$str2 = "L987X123PP";
$_str1 = soundex ($str1);
$_str2 = soundex ($str2);

var_dump($_str1);
var_dump($_str2);
var_dump($_str1 == $_str2);

输出:

string(4) "L210"
string(4) "L210"
bool(true)