从正则表达式中获取不区分大小写的单词

时间:2013-11-20 06:25:38

标签: php regex

假设我有一个像

这样的字符串
$res = "there are many restaurants in the city. Restaurants like xyz,abc. one restaurant like.....";

在上面的示例中,我们可以找到restaurant in 3 places。我需要将计数设为3

$pattern = '/Restaurant/';
preg_match($pattern, substr($res,10), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

还有一个问题 这与上述问题有关。即,我有Food & Drinks之类的文字。我需要将此字词与fooddrinksseafood ...等相匹配,任何人都可以帮我解决这个问题。提前致谢。

4 个答案:

答案 0 :(得分:2)

i修饰符用于不区分大小写的匹配。 ?量词使前一个令牌可选匹配,在这种情况下,前一个s为零或一次。

您正在使用preg_match()想要获得所有匹配,您需要preg_match_all()

$pattern = '/restaurants?/i';
preg_match_all($pattern, substr($res,10), $matches, PREG_OFFSET_CAPTURE);
print_r($matches[0]);

请参阅working demo

答案 1 :(得分:2)

你可以使用这样的正则表达式:

$pattern = '/restaurants?/i';

我对原始正则表达式进行了两处更改:

  1. 添加i修饰符 - 这是不区分大小写的标记。
  2. s?添加到搜索字符串的末尾。这使得最后s个字符可选。它匹配s
  3. 的零次或一次出现

    请注意,因为我们使用不区分大小写的标志,所以此正则表达式也会匹配以下内容:

    • 餐馆
    • 餐馆
    • 餐馆

答案 2 :(得分:1)

我建议查看regex guide - 这是一个非常简单的请求。

正则表达式中的

|表示或?表示前一个字符或组中的0或1,因此以下模式应适用于您的规范:

$pattern = '/[Rr]estaurants?/

答案 3 :(得分:-2)

  As a solution to your problem please try executing following code snippet

  $url = "http://www.examplesite.com/";
  $curl = new Curl();
  $res = $curl->get($url);
  $pattern = '/Restaurant(s)*/i';
  preg_match($pattern, substr($res,10), $matches, PREG_OFFSET_CAPTURE);
  print_r($matches);