我对常规表达不是很坚定,所以我不得不问你:
如果字符串包含以@ ??
开头的单词,如何找到PHPe.g。我有一个字符串,如“这是@codeworxx”???
我很抱歉,但我没有起点:(
希望你能提供帮助。
谢谢, 的Sascha
好的感谢结果 - 但我犯了一个错误 - 如何在eregi_replace中实现???
$text = eregi_replace('/\B@[^\B]+/','<a href="\\1">\\1</a>', $text);
不起作用??!?
为什么呢?我不必输入与模式相同的表达式吗?
答案 0 :(得分:5)
匹配任何在@
前面有一些空格的内容,后跟除空格之外的其他内容:
$ cat 1812901.php
<?php
echo preg_match("/\B@[^\B]+/", "This should @match it");
echo preg_match("/\B@[^\B]+/", "This should not@ match");
echo preg_match("/\B@[^\B]+/", "This should match nothing and return 0");
echo "\n";
?>
$ php 1812901.php
100
答案 1 :(得分:2)
像这样打破你的字符串:
$string = 'simple sentence with five words';
$words = explode(' ', $string );
然后你可以遍历数组并检查每个单词的第一个字符是否等于“@”:
if ($stringInTheArray[0] == "@")
答案 2 :(得分:1)
假设你在一个单词中定义一个字母序列,它们之间没有空格,那么这应该是一个很好的起点:
$subject = "This is for @codeworxx";
$pattern = '/\s*@(.+?)\s/';
preg_match($pattern, $subject, $matches);
print_r($matches);
说明:
\s*@(.+?)\s
- 查找以 @ 开头的任何内容,将以下所有字母,数字和任何不是空格(空格,制表符,换行符)的内容分组,直到最近的空格。
请参阅$matches
数组的输出以访问内部组和正则表达式结果。
答案 3 :(得分:0)
@OP,不需要正则表达式。只是PHP字符串方法
$mystr='This is for @codeworxx';
$str = explode(" ",$mystr);
foreach($str as $k=>$word){
if(substr($word,0,1)=="@"){
print $word;
}
}
答案 4 :(得分:0)
只是这对未来的某人有帮助
/((?<!\S)@\w+(?!\S))/
这将匹配任何包含字母数字字符的单词,以“@”开头。除了单词的开头之外,它不会与“@”匹配。
匹配案例:
@username
foo @username bar
foo @username1 bar @username2
失败的案例:
foo@username
@username$
@@username