0

Twitter や instagram のようなメンション システムを使用しており、@johndoe を入力するだけで、"@" とこれらの文字の間の名前を取り除くことができ?ます。,]:(space)

例として、私の文字列は次のとおりです。 hey @johnDoe check out this event, be sure to bring @janeDoe:,@johnnyappleSeed?, @johnCitizen] , and @fredNerk

文字, ,を付けずにjaneDoe, johnnyappleSeed,johnCitizenの配列を取得するにはどうすればよいですか。fredNerk?,]:

のバリエーションを使用する必要があることは知っていますpreg_matchが、それを強く理解していません。

4

4 に答える 4

1
preg_match_all("/\@(.*?)\s/", $string, $result_array);
于 2013-08-14T16:49:18.617 に答える
1

This is what you've asked for: /\@(.*?)\s/
This is what you really want: /\b\@(.*?)\b/

Put either one into preg_match_all() and evaluate the results array.

于 2013-08-14T16:45:55.867 に答える
0
$check_hash = preg_match_all ("/@[a-zA-Z0-9]*/g", $string_to_match_against, $matches);

その後、次のようなことができます

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

更新:無効な文字を削除しようとしていたことに気付きました。更新されたスクリプトでそれを行う必要があります。

于 2013-08-14T16:51:36.017 に答える
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
----------------------------------------------------------------------
于 2013-08-15T09:44:09.737 に答える