Php 查找一个术语并捕获以下文本或空格后的内容

Php 查找一个术语并捕获以下文本或空格后的内容,php,regex,whitespace,Php,Regex,Whitespace,我有一些支付日志(txt),这些文件中有一些模式: 模式1: Nickname -- blank space Jon Doe 模式2: Nickname: Jon Doe 模式3: Nickname: Jon Doe 我如何抓住所有的文本,在这个例子中,它将是“乔恩DOE”,它总是在术语“代码>(昵称)< /COD> >之后忽略下一行,而忽略空白空间? 更新: 并非每个“昵称”后面都有“:”双点 类似于第一种模式 更新: 昵称可以以小写字

我有一些支付日志
(txt)
,这些文件中有一些模式:

模式1:

Nickname
                          -- blank space
Jon Doe
模式2:

Nickname:
Jon Doe
模式3:

Nickname: Jon Doe

我如何抓住所有的文本,在这个例子中,它将是“乔恩DOE”,它总是在术语“代码>(昵称)< /COD> >之后忽略下一行,而忽略空白空间?

更新: 并非每个“昵称”后面都有“:”双点

类似于第一种模式

更新:
昵称
可以以小写字母开头
n

使用
regex
获取文本,然后
trim
删除空格

$fileContent = "Nickname:

Jon Doe";
preg_match('/Nickname:?\n(.*)/s', $fileContent, $match);
//$match[1] contains your line.

echo $match[1];

如果昵称后面有:,则此正则表达式将捕获名称。
我想这是第一个例子中的一个错误

$re = '/[Nn]ickname:?\s+.*?(\w+\s\w+)/s';
$str = 'Nickname
               
Jon Doe
pattern 2:

 Nickname:
 Jon Doe
 pattern 3:

 Nickname: Jon Doe';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);
在这里试试

编辑添加的
可选。 Edit2在昵称中添加了N/N

[Nn] is to make it accept both N and n.  
:? Means : can exsists or not.
\s+ means one or more spaces
.*? Because . can mean new line this means any new lines.
(\w+\s\w+) capture word space word

当与
preg\u match\u all()
一起使用以查找多个匹配项时,这将优于当前的其他答案:

/[Nn]ickname:?\s+\K[A-Za-z ]+/
代码()():

\K
标记完全匹配开始,因此不需要捕获组,这将输出阵列大小减少50%

输出:

array (
  0 => 'Jon Doe',
  1 => 'Jon Doe',
  2 => 'Jon Doe',
)

你不需要无视空格。你可以修剪它们。我想使用正则表达式,但我不知道如何使用。试试这个:谢谢,安德烈亚斯,我忘了提到,但不是每个“昵称”都有这样的内容:“在它之后,我要更新这个问题。还有一件事,它能不区分大小写吗?”?同时适用于“昵称”和“昵称”。我不知道为什么这个答案被高估了,它失败了@mickmackusa它在这里工作,检查这个php提琴//phpfiddle.org/lite?code=我明白了,这是一个
\r
造成的。即使在将
\r
添加到
\n
之前,您的模式也不会返回所需的结果。虽然使用
echo
会错误地显示正确,但这是一种偏好。您的输出可能较小,但也缺少“bug测试”。因为你只有结果,你无法找到它在哪里找到了什么,因此如果需要的话就更难调试了。@Andreas,好的
/[Nn]ickname:?\s+([A-Za-z]+)/
使用捕获组,效率更高。我没有说你错了。只是说这是一种偏好。我通常以一种可以轻松调试的方式编写代码。但是如果中的数据是一致的,没有任何变化,那么我想你的答案是非常有效的。它也有效,非常值得赞赏,但我对单词之间有空格的术语有一些问题,比如“最喜欢的颜色”,不是吗works@NGTHM4R3
最喜欢的颜色
而不是
昵称
?如果可以标准化每个值前面的标签,则此任务将变得更加容易。通过确保标签以
结尾,正则表达式模式将变得更加高效和准确。如果你给我看你的新输入字符串和你的模式,我会帮你的。
array (
  0 => 'Jon Doe',
  1 => 'Jon Doe',
  2 => 'Jon Doe',
)