3

我有这个字符串/内容:

@Salome@Jessi H和“ ”老鼠在院子里@O'Ren玩耍。@Lean@Ziggy

好吧,我试图让所有名字都集中在上面。我已经使用@符号来创建像在我的网络中使用的散列一样。@Jessi H如果您注意到,在 like和 like 之前和之后的字符之间有空格的名称@Ziggy。因此,如果您建议我以另一种方式管理哈希以使其正常工作,我不同意。我在想,对于有空格的用户,可以用引号写散列,比如@"Jessi H". 你怎么看?其他示例:

@Lean's => @"Lean"'s  
@Jessi H => @"Jessi H"  
"@Jessi H" => (sorry, I don't know how to parse it)  
@O'Ren => @"O'Ren" 

我有什么办法?我开始在 php 中使用正则表达式,但是一些 SO 问题对我开始很有用,所以,这些是我首先使用preg_match_all函数的尝试:

结果/@(.*?)[,\" ]/

Array ( [0] => Salome [1] => Jessi [2] => Charlie [3] => Lean's [4] => Ziggy" ) )

/@"(.*?)"/类似名称的结果@"name"

Empty array

伙计们,我不希望你们为我做这一切。我认为伪代码或类似的东西将有助于引导我走向正确的方向。

4

2 回答 2

3

尝试以下正则表达式:'/@(?:"([^"]+)|([^\b]+?))\b/'

这将返回两个匹配组,第一个包含任何带引号的名称(例如@"Jessi H"@"O'Ren"),第二个包含任何不带引号的名称(例如@Salome, @Leon

$matches = array();
preg_match_all('/@(?:"([^"]+)|([^\b]+?))\b/', '@Salome, @"Jessi H" and @"O\'Ren" were playing at the @Lean\'s yard with "@Ziggy" the mouse.', $matches);
print_r($matches);

输出:

Array
(
    [0] => Array
        (
            [0] => @Salome
            [1] => @"Jessi H
            [2] => @"O'Ren
            [3] => @Lean
            [4] => @Ziggy
        )

    [1] => Array
        (
            [0] => 
            [1] => Jessi H
            [2] => O'Ren
            [3] => 
            [4] => 
        )

    [2] => Array
        (
            [0] => Salome
            [1] => 
            [2] => 
            [3] => Lean
            [4] => Ziggy
        )

)
于 2012-10-10T20:43:01.850 回答
1

您是在设置这些要求还是可以选择它们?如果您可以设置要求,我建议使用_而不是空格,这将允许您使用正则表达式:

/@(.+) /

如果必须允许空格并且您要使用引号,那么引号可能应该跨越整个名称,允许使用此正则表达式:

/@\"(.+)\" /

于 2012-10-10T20:30:57.413 回答