How to search in an array with preg_match?

后端 未结 5 1657
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-27 14:54

How do I search in an array with preg_match?

Example:

 name\         


        
相关标签:
5条回答
  • 2020-11-27 15:18
    $items = array();
    foreach ($haystacks as $haystack) {
        if (preg_match($pattern, $haystack, $matches)
            $items[] = $matches[1];
    }
    
    0 讨论(0)
  • 2020-11-27 15:25

    You can use array_walk to apply your preg_match function to each element of the array.

    http://us3.php.net/array_walk

    0 讨论(0)
  • 2020-11-27 15:29

    Use preg_grep

    $array = preg_grep(
        '/(my\n+string\n+)/i',
        array( 'file' , 'my string  => name', 'this')
    );
    
    0 讨论(0)
  • 2020-11-27 15:40

    In this post I'll provide you with three different methods of doing what you ask for. I actually recommend using the last snippet, since it's easiest to comprehend as well as being quite neat in code.

    How do I see what elements in an array that matches my regular expression?

    There is a function dedicated for just this purpose, preg_grep. It will take a regular expression as first parameter, and an array as the second.

    See the below example:

    $haystack = array (
      'say hello',
      'hello stackoverflow',
      'hello world',
      'foo bar bas'
    );
    
    $matches  = preg_grep ('/^hello (\w+)/i', $haystack);
    
    print_r ($matches);
    

    output

    Array
    (
        [1] => hello stackoverflow
        [2] => hello world
    )
    

    Documentation

    • PHP: preg_grep - Manual

    But I just want to get the value of the specified groups. How?

    array_reduce with preg_match can solve this issue in clean manner; see the snippet below.

    $haystack = array (
      'say hello',
      'hello stackoverflow',
      'hello world',
      'foo bar bas'
    );
    
    function _matcher ($m, $str) {
      if (preg_match ('/^hello (\w+)/i', $str, $matches))
        $m[] = $matches[1];
    
      return $m;
    }
    
    // N O T E :
    // ------------------------------------------------------------------------------
    // you could specify '_matcher' as an anonymous function directly to
    // array_reduce though that kind of decreases readability and is therefore
    // not recommended, but it is possible.
    
    $matches = array_reduce ($haystack, '_matcher', array ());
    
    print_r ($matches);
    

    output

    Array
    (
        [0] => stackoverflow
        [1] => world
    )
    

    Documentation

    • PHP: array_reduce - Manual
    • PHP: preg_match - Manual

    Using array_reduce seems tedious, isn't there another way?

    Yes, and this one is actually cleaner though it doesn't involve using any pre-existing array_* or preg_* function.

    Wrap it in a function if you are going to use this method more than once.

    $matches = array ();
    
    foreach ($haystack as $str) 
      if (preg_match ('/^hello (\w+)/i', $str, $m))
        $matches[] = $m[1];
    

    Documentation

    • PHP: preg_match - Manual
    0 讨论(0)
  • 2020-11-27 15:41
    $haystack = array (
       'say hello',
       'hello stackoverflow',
       'hello world',
       'foo bar bas'
    );
    
    $matches  = preg_grep('/hello/i', $haystack);
    
    print_r($matches);
    

    Output

    Array
    (
        [1] => say hello
        [2] => hello stackoverflow
        [3] => hello world
    )
    
    0 讨论(0)
提交回复
热议问题