php获取(at)之后的第一个和第二个单词

时间:2013-10-15 08:15:34

标签: php

我需要一些PHP代码的帮助,这会折磨我2-3个小时。尝试了Ny方法但没有结果。我想在@之后取第一个和第二个单词,例如 @John Doe ,php结果带我去John和Doe

我认为: (编者)

$q = 'Hi @Stefan Simeonov kak si? @Krasi avramov';
    if (preg_match_all("(@[^ ]+[ ][^ ]+)", $q, $match)) {
        foreach ($match[0] as $singleMatch) {
           $finded[] = $singleMatch; 
           $success = 1;
        }
    } elseif (preg_match_all("(@[^ ]+)", $q, $match)) {
        foreach ($match[0] as $singleMatch) {
            $finded[] = $singleMatch; 
            $success = 1;
        }
    } else {
        $success = 0;
    }

    if($success = 1) {
        $replace = $q;
        foreach ($finded as $user) {
            $expl = explode("@",$user);
            $rep = '<a href="?profile='.$expl[1].'">'.$expl[1].'</a>';
            $replace = str_replace($user,$rep,$replace);
        }
        echo $replace;
    } else {
        echo $q;
    }

7 个答案:

答案 0 :(得分:3)

使用正则表达式,例如:

<?php
$q = 'Hi @John Doe kak si?';

if (preg_match('/@(\w+)\s(\w+)/', $q, $matches)) {
    var_dump($matches);
}

这将在@之后找一个单词,后跟一个空格,然后是另一个单词。

答案 1 :(得分:1)

您可以这样做:

<?
$q = 'Hi @John Doe kak si?';
$explodeTab = explode("@",$q);
$words = explode(" ",$explodeTab[1]);
print_r($words);
?>

<强> WORKING CODE

答案 2 :(得分:0)

您可以使用(@[^ ]+[ ][^ ]+)的正则表达式:

<?php
    $q = 'Hi @Stefan Simeonov kak si?';
    if (preg_match_all("(@[^ ]+[ ][^ ]+)", $q, $match)) {
        foreach ($match[0] as $singleMatch) {
            echo 'Found match: ' . $singleMatch . PHP_EOL;
        }
    }
?>

将输出:

  

找到匹配:@Stefan Simeonov

答案 3 :(得分:0)

假设单词总是用空格分隔,你可以先实现这一点,首先在@字符上拆分输入字符串,然后取第1项并将其分割到空格字符上并将结果减少为单词你需要的。

<?php
$q = 'Hi @John Doe kak si?';
$atSplitResult = explode('@', $q);
$spaceSplitResult = explode(' ', $atSplitResult[1]);
$firstTwoWords = array_slice($spaceSplitResult, 0, 2);

var_dump($firstTwoWords);

答案 4 :(得分:0)

让我们说,我们有一句话

让我们看看,@ mike,你好吗?

现在:

$atExploded = explode('@', $str); //where $str is our string
if(count($atExploded)){
  foreach($atExploded as $at){
    $spaceExplode = explode(' ', $at);
    echo $spaceExplode[0].' '.$spaceExplode[1]; //after checking that [0] and [1] are reachable
  }
}

当然你应该删除任何不需要的字符(如大括号,冒号等),但我希望你明白这一点。

答案 5 :(得分:0)

PHP

$string = 'Hi @John Doe kak si?';
$regex = preg_match("/@(.+?)\s(.+?)\s/", $string, $matches);
var_dump($matches);

返回

array(3) { [0]=> string(10) "@John Doe " [1]=> string(4) "John" [2]=> string(3) "Doe" }

答案 6 :(得分:0)

你可以写这样的东西。这将输出@John Doe

<?php
$q = 'Hi @John Doe kak si?';
$q = preg_match('/@[A-Za-z]+\s[A-Za-z]+/', $q, $match);
print_r($match);

?>