如何提取字符串中特定关键字后面的子字符串?

普拉斯

我需要处理具有大部分常规格式/结构的字符串。基本上,该字符串包含3个关键字总是出现在同一顺序:ATLPáscoaATLNatal,和ATLVerão

在这些关键字之间是未知数量的空白字符。此外,每个关键字后都有可能由非空白字符和空白字符组成的日期值。

通过他们的关键字相关联,我要声明3个变量叫$datePáscoa$dateNatal$dateVerão并指定日期串到这些变量。

下面是一个例子:

$string = 'ATLPáscoa            ATLNatal          ATLVerão     Turno11-03a07desetembro';

我想要的输出是:

$datePáscoa = '';
$dateNatal = '';
$dateVerão = 'Turno11-03a07desetembro';

这是另一个例子:

$string = 'ATLPáscoa  bananas   ATLNatal xyza sd af          ATLVerão      Turno11-03a07desetembro';

我的预期输出是:

$datePáscoa = 'bananas';
$dateNatal = 'xyza sd af';
$dateVerão = 'Turno11-03a07desetembro';

我尝试使用str_replace(),但显然不是这样:

$string = str_replace("Atelier","",$string );
$string = str_replace("Páscoa","",$string );
$string = str_replace("Natal","",$string );
$string = str_replace("Verão","",$string );

如何提取日期值并将值分配给适当的变量?

米克马克库萨

代码:(演示 <- 带有替代输入字符串

$string = 'ATLPáscoa  banana   ATLNatal xyza sd af          ATLVerão      Turno11-03a07desetembro';

$datePáscoa = preg_match('~ATLPáscoa\s*\K(?!ATL)\S+(?:\s+(?!ATL)\S+)*~u', $string, $out) ? $out[0] : '';
$dateNatal = preg_match('~ATLNatal\s*\K(?!ATL)\S+(?:\s+(?!ATL)\S+)*~u', $string, $out) ? $out[0] : '';
$dateVerão = preg_match('~ATLVerão\s*\K\S+(?:\s+\S+)*~u', $string, $out) ? $out[0] : '';

echo '$datePáscoa = '; var_export($datePáscoa); echo "\n";
echo '$dateNatal = '; var_export($dateNatal); echo "\n";
echo '$dateVerão = '; var_export($dateVerão);

输出:

$datePáscoa = 'banana'
$dateNatal = 'xyza sd af'
$dateVerão = 'Turno11-03a07desetembro'

如果这是我的项目,我可能会构建一个正则表达式函数调用,返回数组中的所有匹配项,然后在需要时提取我想要的内容。您已经要求单独命名的变量,所以我认为 3 个函数调用将是最简单的演示。

您提供的输入不需要包含u模式修饰符,但我会添加它,以防您的实际数据需要它。

\K告诉正则表达式引擎从全字符串匹配中“释放先前匹配的字符”——这用于避免使用捕获组并确保您的返回值只是“白肉”。相同的原因就是您看到的原因\S+(?:\s+\S+)*——它匹配一个“单词”,然后可选地匹配一个或多个空格,然后是另一个“单词”。

var_export()在我的演示中使用来表明结果中没有前导或尾随空格字符。

(?!ATL)在前两个模式中用于避免“过度匹配”或基本上“匹配太远”。第三种模式不需要这种考虑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获取字符串中特定字符前面或后面的文本

从 Powershell 中的特定关键字中提取字符串

如何在特定的字符串或关键字之后获取字符串

在字符串中的关键字后获取数字

python-将关键字后的字符串提取到列表中

提取字符串中的子字符串

从字符串中搜索并提取具有特定关键字的字符串

从后面的Java开始提取3的子字符串

提取字符串的子串

如何使用正向隐式断言从单词“ named”后面的字符串中提取子字符串

如何使用parsec获取字符串中特定模式的子字符串

提取字符串之间的子字符串

提取字符串之间的子字符串

如何使用关键字和索引提取子字符串?

提取字符串的特定部分

提取字符串中特殊字符之间的子字符串

如何按特定关键字分割字符串?

如何从Excel中的字符串中提取字符

当diliminater出现多次时,如何解析文件并在关键字后返回字符串

如何从字符串中提取字符串

如何從 C# 中特定字符之間的字符串中提取字符串?

如何从python中的字符串中提取特定的子字符串

如何使用特殊关键字将字符串拆分为子字符串?

获取关键字后的值,直到字符串中的下一个关键字

在R中的特定模式之后提取字符串

根据关键字提取字符串的第一个匹配项

从长文本中提取字符串以用作搜索关键字

如何从Python中的熊猫数据框中的列中提取关键字(字符串)

如何使用python3提取字符串中的前后子串