preg_match所有单词都以@开头?

时间:2009-11-28 16:07:36

标签: php regex

我对常规表达不是很坚定,所以我不得不问你:

如果字符串包含以@ ??

开头的单词,如何找到PHP

e.g。我有一个字符串,如“这是@codeworxx”???

我很抱歉,但我没有起点:(

希望你能提供帮助。

谢谢, 的Sascha


好的感谢结果 - 但我犯了一个错误 - 如何在eregi_replace中实现???

$text = eregi_replace('/\B@[^\B]+/','<a href="\\1">\\1</a>', $text);

不起作用??!?

为什么呢?我不必输入与模式相同的表达式吗?

5 个答案:

答案 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