我需要一些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;
}
答案 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);
?>