2013-08-14 4 views
0

Я использую систему упоминания, например, на твиттере и instagram, где вы просто ставите @johndoe то, что я пытаюсь сделать, это иметь возможность разделить имя между «@» и этими символами ?, ,, ], :, (space)Получите подстроку между 2-мя символами в php

как пример Heres моя строка: hey @johnDoe check out this event, be sure to bring @janeDoe:,@johnnyappleSeed?, @johnCitizen] , and @fredNerk

, как я могу получить массив janeDoe, johnnyappleSeed, johnCitizen, fredNerk без CHARACT ers ?, ,, ], : прилагается к ним.

Я знаю, что должен использовать вариацию preg_match, но у меня нет сильного понимания этого.

+1

https://xkcd.com/208/ –

+0

Некоторые из компонентов начинать с «@» и заканчивать словами «,», а не «{пробел }». – DevlshOne

ответ

1

Это то, что вы просили: /\@(.*?)\s/
Это то, что вы действительно хотите: /\b\@(.*?)\b/

Помещенный либо один в preg_match_all() и оценить массив результатов.

+0

Я обновил вопрос, я не понял, что мой вопрос задал строку до следующего (пробела), я действительно хочу заменить последний символ, если его ("]", "?", "[", ":", «,»), ваш ответ был самым близким к тому, что мне нужно. –

1
preg_match_all("/\@(.*?)\s/", $string, $result_array); 
0
$check_hash = preg_match_all ("/@[a-zA-Z0-9]*/g", $string_to_match_against, $matches); 

Вы могли бы сделать Somthing как

foreach ($matches as $images){ 
    echo $images."<br />"; 
} 

UPDATE: Просто понял, что вы искали, чтобы удалить недопустимые символы. Обновленный скрипт должен это сделать.

0

Как насчет:

$str = 'hey @johnDoe check out this event, be sure to bring @janeDoe:,@johnnyappleSeed?, @johnCitizen] , and @fredNerk'; 
preg_match_all('/@(.*?)(?:[?, \]: ]|$)/', $str, $m); 
print_r($m); 

выхода:

Array 
(
    [0] => Array 
     (
      [0] => @johnDoe 
      [1] => @janeDoe: 
      [2] => @johnnyappleSeed? 
      [3] => @johnCitizen] 
      [4] => @fredNerk 
     ) 

    [1] => Array 
     (
      [0] => johnDoe 
      [1] => janeDoe 
      [2] => johnnyappleSeed 
      [3] => johnCitizen 
      [4] => fredNerk 
     ) 

) 

объяснение:

The regular expression: 

(?-imsx:@(.*?)(?:[?, \]: ]|$)) 

matches as follows: 

NODE      EXPLANATION 
---------------------------------------------------------------------- 
(?-imsx:     group, but do not capture (case-sensitive) 
         (with^and $ matching normally) (with . not 
         matching \n) (matching whitespace and # 
         normally): 
---------------------------------------------------------------------- 
    @      '@' 
---------------------------------------------------------------------- 
    (      group and capture to \1: 
---------------------------------------------------------------------- 
    .*?      any character except \n (0 or more times 
          (matching the least amount possible)) 
---------------------------------------------------------------------- 
)      end of \1 
---------------------------------------------------------------------- 
    (?:      group, but do not capture: 
---------------------------------------------------------------------- 
    [?, \]: ]    any character of: '?', ',', ' ', '\]', 
          ':', ' ' 
---------------------------------------------------------------------- 
    |      OR 
---------------------------------------------------------------------- 
    $      before an optional \n, and the end of 
          the string 
---------------------------------------------------------------------- 
)      end of grouping 
---------------------------------------------------------------------- 
)      end of grouping 
---------------------------------------------------------------------- 
Смежные вопросы