我正在寻找一个正则表达式,它收集最后一个冒号(:)和它之前的第一个空格之间的所有内容。因此,如果我有句"HUHweg: 4ihfw:euigr yalalala:"
,我想收集"yalalala"
。
我想出了" (?<content>)/[^:]*$"
,但内容组是空的。我希望内容后跟内容直到最后
:
结尾($
)可以正常工作,但事实并非如此。如何才能工作?
答案 0 :(得分:3)
你还没到目前为止......尝试使用(这里我使用~
作为正则表达式分隔符)
~ (?<content>[^ :]*):\s*$~
捕获组必须有一些东西可以捕获。此外,您需要禁止内容中的空格,或者您可能在所需的部分之前捕获一些单词。
\s
,所有类型的空格(空格,制表符,换行符......)的快捷方式将捕获最后一列之后有尾随空格的情况。
请参阅demo
答案 1 :(得分:0)
PHP代码(我认为它可以很容易地转换成其他语言)
<?php
$patterns=array('/(.|\s)*(\s)((.[^:])*)(\:)(?=[^\:]*)/');
$replacements=array(' $3 ');
$string='HUHweg: 4ihfw:euigr yalalala: ';
echo preg_replace($patterns,$replacements,$string);
?>
Result: yalalala
首先是任何数量的炭或白炭。然后恰好是一个空白区域。然后我们的字符串被捕获为$3
。接下来是冒号,然后是匹配任何char而不是冒号的语句:)