.net 什么是用于匹配最后一个冒号和它前面的第一个空格之间的所有内容的正则表达式?
我正在寻找一个正则表达式,它收集最后一个冒号(:)和它前面的第一个空格之间的所有内容。所以如果我有一句话.net 什么是用于匹配最后一个冒号和它前面的第一个空格之间的所有内容的正则表达式?,.net,regex,.net,Regex,我正在寻找一个正则表达式,它收集最后一个冒号(:)和它前面的第一个空格之间的所有内容。所以如果我有一句话“HUHweg:4ihfw:euigr yalalala:”我想收集“yalalala” 我想出了“(?)/[^:::]*$”,但内容组是空的。我希望一个空格,后跟内容,直到最后一个:,从结尾($)可以工作,但实际上不行。怎么才能让它工作呢?你还没走到这一步。。。尝试使用(这里我使用~作为正则表达式分隔符) ~(?[^:]*):\s*$~ 抓捕小组必须要抓捕一些东西。此外,您还需要禁止内容中
“HUHweg:4ihfw:euigr yalalala:”
我想收集“yalalala”
我想出了
“(?)/[^:::]*$”
,但内容组是空的。我希望一个空格
,后跟内容,直到最后一个:
,从结尾($
)可以工作,但实际上不行。怎么才能让它工作呢?你还没走到这一步。。。尝试使用(这里我使用~
作为正则表达式分隔符)
~(?[^:]*):\s*$~
抓捕小组必须要抓捕一些东西。此外,您还需要禁止内容中的空格,否则可能会在所需部分之前捕获一些单词
\s
是所有类型的空格(空格、制表符、换行符…)的快捷方式,它将捕获最后一列后面有尾随空格的情况
请参阅PHP代码(我认为它可以很容易地转换为其他语言)
结果:雅拉拉拉
首先是任何数量的任何字符或白色字符。然后正好出现一个空白。然后是我们的字符串,它被捕获为
$3
。接下来是冒号,然后是匹配任何字符但不匹配冒号的语句:)仍然不返回任何内容。如果我删除$,它会返回第一个之前的所有内容:直到空格。更准确地说:我有:“2014-04-13 01:32:36.246请求ThisIsAMethod:“
,我想收集ThisIsAMethod
@user2609980是的,你的问题是后面的空格$
匹配字符串的结尾,因此正则表达式实际上无法匹配。这是你的全部字符串,还是后面还有多行新行?太好了!实际上是尾随的空格。如果我做了(?[^:]*):$
它会工作。:-)谢谢@user2609980:我编辑了以添加更一般的答案。很高兴我能帮忙!不,这是完全错误的(.|\s)
是匹配任何字符(包括换行符)的最差方法(已解释)(?=[^\:]*)
并不意味着任何东西(“后跟零或更多的东西”总是正确的);里面没有需要匹配的空间。我添加了我写的空间=[^\:]*是0个或多个除空格以外的符号。除了(.|\s)*之外,我不知道有什么更好的方法来匹配任何标志,包括空格和/或换行符,但也许你可以给我一些建议:)在我的情况下(.|\n)从来没有像预期的那样工作过1(?=[^::]*)
表示可以匹配除冒号以外的零个或多个字符;即使下一个字符是冒号,它也会成功。如果您想说在此之后不再有冒号,则必须锚定它:(?=[^::]*$)
。2.在大多数风格中,匹配任何字符(包括换行符)的最佳方法是使用
并设置单行/DOTALL标志。在PHP和.NET中,您可以通过在正则表达式的开头添加(?s)
来实现这一点。3. \s
匹配任何空白字符;要匹配一个空格,您应该使用空格。
~ (?<content>[^ :]*):\s*$~
<?php
$patterns=array('/(.|\s)*(\s)((.[^:])*)(\:)(?=[^\:]*)/');
$replacements=array(' $3 ');
$string='HUHweg: 4ihfw:euigr yalalala: ';
echo preg_replace($patterns,$replacements,$string);
?>
Result: yalalala