1

我需要一些 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;
    }
4

7 回答 7

3

例如使用正则表达式:

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

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

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

于 2013-10-15T08:26:28.620 回答
1

你可以这样做:

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

工作代码

于 2013-10-15T08:26:02.483 回答
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

于 2013-10-15T08:26:24.140 回答
0

假设单词总是用空格分隔,您可以通过首先将输入字符串拆分为@字符,然后取第一项并将其拆分为空格字符并将结果减少为您需要的单词来实现此目的。

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

var_dump($firstTwoWords);
于 2013-10-15T08:27:57.510 回答
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
  }
}

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

于 2013-10-15T08:28:09.363 回答
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" }
于 2013-10-15T08:31:41.443 回答
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);

?>
于 2013-10-15T08:33:58.050 回答