以'for the'开头的句子的preg_match

时间:2010-01-12 13:55:43

标签: php preg-match

非常简单,但我无法确切地使用语法。

我只想要一个真或假的检查来查看一个字符串是否有'for the'(不区分大小写)。

5 个答案:

答案 0 :(得分:15)

如果只是这样,那么你可以使用纯文本搜索:

if (stripos("for the", $text) === 0) { // case-insensitive here
    // string starts with "for the"
}

或者,

if (substr($text, 0, 7) == "for the")

下面的评论让我想知道哪个实际上更快,所以我写了一些基准测试。

这是TLDR版本:

    如果你不使用大字符串,
  • strpos真的很快。
  • strncmp可靠且快速。
  • preg_match永远不是一个好选择。

这是长版:

  • 两个不同的“草垛”:
    1. lipsum
    2. 的10000个字符
    3. 83个字符的嘴唇。
  • 5种不同的搜索方法:
    1. strpos
      return strpos($haystack, $needle) === 0
    2. preg_match
      return preg_match("/^$needle/", $haystack) === 1
    3. substr
      return substr($haystack, 0, strlen($needle)) === $needle
    4. strncmp
      return strncmp($needle, $haystack, strlen($needle)) === 0
    5. 手动循环:
for ($i = 0, $l = strlen($needle); $i < $l; ++$i) {
    if ($needle{$i} !== $haystack{$i}) return false;
}
return true;
  • 7种不同的“针”
    • 3个匹配(长度:83,5和1个字符)
    • 4个不匹配(长度:83,82,5和1个字符)。 82个char针根本不匹配,83个字符的针与最后一个字符匹配。
  • 100,000次迭代,每种方法每针干草堆

有趣的观点:

  • 最快的个人测试是strpos在针对短草堆的长而完全不匹配的针上。
    • 事实上,在每种方法运行的14次测试中,strpos记录了前11次。
  • 最慢的个人测试是长针上的手动方法,无论大海捞针的大小。这四项测试比几乎所有其他测试慢10-20倍。
  • 虽然strpos表现最佳,但长草堆上长长的不匹配针使其受压。它们比大多数测试慢5-10倍。
  • strncmp快速最为一致。
  • preg_match一直比其他功能慢约2倍
Haystack: 83 characters
              ______________________________________________________________
 ____________|__________ non-matching ___________|_______  matching ________|
| function   |   1    |   5    |   82   |   83   |   1    |   5    |   83   |
|------------+--------+--------+--------+--------+--------+--------+--------|
| manual     | 0.2291 | 0.2222 | 0.2266 | 4.1523 | 0.2337 | 0.4263 | 4.1972 |
| preg_match | 0.3622 | 0.3792 | 0.4098 | 0.4656 | 0.3642 | 0.3694 | 0.4658 |
| strncmp    | 0.1860 | 0.1918 | 0.1881 | 0.1981 | 0.1841 | 0.1857 | 0.1980 |
| strpos     | 0.1596 | 0.1633 | 0.1537 | 0.1560 | 0.1571 | 0.1589 | 0.1681 |
| substr     | 0.2052 | 0.2066 | 0.2009 | 0.2166 | 0.2061 | 0.2017 | 0.2236 |
-----------------------------------------------------------------------------

Haystack: 10000 characters
              ______________________________________________________________ 
 ____________|__________ non-matching ___________|_______  matching ________|
| function   |   1    |   5    |   82   |   83   |   1    |   5    |   83   |
|------------+--------+--------+--------+--------+--------+--------+--------|
| manual     | 0.2275 | 0.2249 | 0.2278 | 4.1507 | 0.2315 | 0.4233 | 4.1834 |
| preg_match | 0.3597 | 0.3628 | 0.4147 | 0.4654 | 0.3662 | 0.3679 | 0.4684 |
| strncmp    | 0.1886 | 0.1914 | 0.1835 | 0.2014 | 0.1851 | 0.1854 | 0.1989 |
| strpos     | 0.1605 | 2.1877 | 2.3737 | 0.5933 | 0.1575 | 0.1597 | 0.1667 |
| substr     | 0.2073 | 0.2085 | 0.2017 | 0.2152 | 0.2036 | 0.2090 | 0.2183 |
-----------------------------------------------------------------------------

答案 1 :(得分:3)

您想使用^来表示字符串的开头:

$string_one = "For the love of Mike";
$string_two = "for the amazing reason.";

$match = preg_match("/^for the/i", $string_one); // Outputs 1
$match = preg_match("/^for the/i", $string_two); // Outputs 1

/i是使搜索不区分大小写的部分。

答案 2 :(得分:2)

怎么样

if(preg_match("/^for the/", $yourString))
{
    return true;
}                   
else
{
    return false;
}

请注意^的代码与字符串的开头匹配。

答案 3 :(得分:0)

如果你有read the first example in the documentation,你会看到答案。

if ( preg_match('/^for the/i', $sentence) )
{
    // a match was found
}

答案 4 :(得分:0)

正则表达式为/^for the/i