【问题标题】:String compare algorithm字符串比较算法
【发布时间】:2011-03-26 02:13:32
【问题描述】:

我正在尝试编写一些 php 代码来检查名称是否包含在另一个(布尔方法)中。

我目前正在使用 strpos 来确定 str1 是否在 str2 中,但是我希望它更智能一些。即只检查 str1 本身是否存在,而不是另一个不相关的名称/字符串的一部分。

compareStrings(str1,str2)

例如

GAP & THISISNOTAGAP //should return false
GAP & IN THE GAP //should return true
GAP & GAP //shop return true

ROSS & CROSSROADS //should return false
ROSS & ROSS - CHICAGO //should return true

如果有内置函数或正则表达式我可以用来实现上述任何想法?谢谢。

【问题讨论】:

    标签: php algorithm compare


    【解决方案1】:

    Aasmund 完全正确。我想我应该扩展一下如何用 PHP 完成它。

    使用:preg_match()preg_quote()

    使用 preg_quote 很重要,这样带有正则表达式字符的单词就不会弄乱测试。

    包括您的示例测试。

    <?php
    function wordInString($word, $string) {
        return preg_match('/\b'.preg_quote($word, '/').'\b/', $string);
    }
    
    $tests = array(
        array('GAP', 'THISISNOTAGAP', false),
        array('GAP', 'IN THE GAP', true),
        array('GAP', 'GAP', true),
    
        array('ROSS', 'CROSSROADS', false),
        array('ROSS', 'ROSS - CHICAGO', true),
    );
    
    foreach($tests as $test) {
        assert(wordInString($test[0], $test[1]) == $test[2]);
    }
    

    【讨论】:

      【解决方案2】:

      使用正则表达式,您可以使用\b 来表示单词边界:\bGAP\b(我几乎不了解 PHP,但我想您必须输入字符串文字为 "\\bGAP\\b")。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-21
        • 1970-01-01
        • 2011-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-05
        • 1970-01-01
        相关资源
        最近更新 更多