正则表达式帮助。我自己无法解决这个问题

时间:2017-11-28 16:13:02

标签: regex pcre

我需要正则表达式的帮助。 这是文字,我有:

#1234 10% commet@timing:information and other activity2@timing
#12d34 10% commet@timing:information and other activity2@timing
#3132 10% testing@1.10:test commit  frontend@44min:other comments  
#3132 10% testing@1.10:test commit 2 

因此,我需要获取每个 text @ text:带空格的文本 text @ text with spaces 条目。 这就是我现在所拥有的:https://regex101.com/r/zgILCE/1
我的正则表达式/(\w*)\@([\w.]*)\:((\w|\s)*) /效果不佳。

UPD。 我需要正则表达式匹配这个: 一个@ one:一些文字 一一 一个@之一:一个

图例:

一个字(可能有数字)

一些文本 - 常规文本(可能带有数字)

3 个答案:

答案 0 :(得分:2)

我会使用以下RegEx:

\s+\S+\@\S+(\s+|$)

上面的RegEx匹配空格,然后是任何非空格字符后跟@符号,然后是任何非空格字符,后跟空格。这使它匹配:通过下一个空格。

如果文件中的最后一项在文件末尾没有行尾,那么最后的$将使它仍然匹配。否则,使用全局匹配修饰符,\ s无论如何都将匹配垂直白色空间(也就是行结束)

如果每个评论你真的只想匹配一个空白区域,而文档中没有多少:

\s\S+\@\S+(\s|$)

答案 1 :(得分:2)

我认为你在寻找:

(?<!\S)(\w+)@([\w.]*:)?(\w+(?:\h\w+)*)(?!\S)

demo

细节:

(?<!\S) # not preceded by a character that isn't a whitespace
(\w+)
@
([\w.]*:)? # according to your requirements this part is optional
(
    \w+ (?:\h\w+)* # way to include eventual single spaces between words
)
(?!\S) # not followed by a character that isn't a whitespace

答案 2 :(得分:0)

<?php
$string1='#3132 10% testing@1.10:test commit  frontend@44min:other comments ';


$string=explode(' ',$string1);

echo '<pre>';

$myArray=array();
foreach ($string as $row){
    if (strpos($row, '@') !== false) {
        $myArray[]=$row;
    }
}

print_r($myArray);

我将提供一个更多的PHP解决方案,而不是一个正则表达式。我正在爆炸你的字符串以获得一个数组,我用循环搜索数组字段以找到@。在我这样做之后,我就回到了这个领域。

输出结果为:

Array
(
    [0] => testing@1.10:test
    [1] => frontend@44min:other
)