我需要一些关于php代码的帮助,这折磨了我2-3个小时。Ny方法尝试过但没有结果。我想在@之后取第一个和第二个单词,例如@John Doe和php结果带我约翰和多伊
我的东西是:(已编辑)
$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;
}
例如使用正则表达式:
<?php
$q = 'Hi @John Doe kak si?';
if (preg_match('/@('w+)'s('w+)/', $q, $matches)) {
var_dump($matches);
}
这将在@
后查找一个单词,后跟一个空格,后跟另一个单词。
你可以做这样的事情:
<?
$q = 'Hi @John Doe kak si?';
$explodeTab = explode("@",$q);
$words = explode(" ",$explodeTab[1]);
print_r($words);
?>
工作代码
您可以使用(@[^ ]+[ ][^ ]+)
正则表达式:
<?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西蒙诺夫
假设单词总是用空格分隔,您可以通过首先拆分@
字符上的输入字符串,然后获取第 1 项并将其拆分为空格字符并将结果减少到您需要的单词来实现此目的。
<?php
$q = 'Hi @John Doe kak si?';
$atSplitResult = explode('@', $q);
$spaceSplitResult = explode(' ', $atSplitResult[1]);
$firstTwoWords = array_slice($spaceSplitResult, 0, 2);
var_dump($firstTwoWords);
假设,我们有一个句子
让我们看看,@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
}
}
当然,您应该删除任何不需要的字符(如大括号,冒号等),但我希望您能理解。
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" }
你可以写这样的东西。这将输出@John Doe
<?php
$q = 'Hi @John Doe kak si?';
$q = preg_match('/@[A-Za-z]+'s[A-Za-z]+/', $q, $match);
print_r($match);
?>