2009-11-28 58 views
1

我对正则表达式并不是非常坚定,所以我不得不问你:preg_match所有单词都以@开始?

如何找到一个字符串包含一个以@开头的单词?

例如我有一个像“这是for @codeworxx”的字符串?

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

希望你能帮助

感谢, 萨沙


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

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

不起作用??!?

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

回答

5

匹配任何与在一个@前面一些空白,然后别的东西比空白:

$ cat 1812901.php 

<?php 
    echo preg_match("/\[email protected][^\B]+/", "This should @match it"); 
    echo preg_match("/\[email protected][^\B]+/", "This should [email protected] match"); 
    echo preg_match("/\[email protected][^\B]+/", "This should match nothing and return 0"); 
    echo "\n"; 
?> 

$ php 1812901.php 
100 
+1

你应该改变_ * _到 - + - ,所以它不会赶上空话 – Amirshk

+0

THX,纠正.. – miku

+0

也要看是什么单词,你可能想使用'\ w'而不是'[^ \ B]' –

1

假设你定义一个单词的字母序列,它们之间没有空格,那么这应该是你一个很好的起点:

$subject = "This is for @codeworxx"; 
$pattern = '/\s*@(.+?)\s/'; 
preg_match($pattern, $subject, $matches); 
print_r($matches); 

说明: \s*@(.+?)\s - 寻找任何开始@,将所有以下字母,数字和任何不是空格(空格,制表符,换行符)的内容分组,直到最接近的空格。

查看$matches数组用于访问内部组和正则表达式结果的输出。

+2

NOTE:事实上不匹配的东西** **开始与@,它捕获[email protected]了。 –

+0

好吧,我会尝试 - 谢谢:) – codeworxx

+0

@kemp:TNX,固定 – Amirshk

2

打破你的字符串像这样:

$string = 'simple sentence with five words'; 
$words = explode(' ', $string); 

然后可以循环槽阵列并检查每个单词的第一个字符是否等于“@”:

if ($stringInTheArray[0] == "@") 
+3

这实际上是这样做的好方法。没有什么是昂贵的。在这个任务中创建了正则表达式。 –

+1

什么是坏的,什么是坏的?不是由你来决定的。这是一个完美的正常和清晰的方式来做任何OP想要的,而不用正则表达式混淆你的代码。 – ghostdog74

+0

@ levislevis85。相对而言,考虑到性能和可管理性,简单的正则表达式*通常比手动字符串操作更可取,尤其是对于大型字符串,尽管学习起来有点困难......而且,如何使用字符串混淆代码操纵代码比使用regexp混淆它更好?至少,他们一般都是很短;-) – Atli

0

@OP,不需要regex。只是PHP字符串方法

$mystr='This is for @codeworxx'; 
$str = explode(" ",$mystr); 
foreach($str as $k=>$word){ 
    if(substr($word,0,1)=="@"){ 
     print $word; 
    } 
} 
+0

它可能会更好只是将字符串分割在@ char,并确保它前面有一个空格,然后是一个有效的字符。 – Atli

+0

下投票,因为我没有使用正则表达式?多么荒谬的笑话! – ghostdog74

+0

@Atli,如果我想,我可以修改变量来获得结果。 – ghostdog74

0

只是柜面这是有帮助的人在未来

/((?<!\S)@\w+(?!\S))/ 

这将匹配包含字母数字字符,以启动任何词“@”。除了单词的开头之外,它不会将单词与“@”匹配。

匹配情况:

@username 
foo @username bar 
foo @username1 bar @username2 

失败案例:

[email protected] 
@username$ 
@@username 
相关问题