Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在正则表达式中匹配以:结尾的字符串_Regex_Re2 - Fatal编程技术网

Regex 如何在正则表达式中匹配以:结尾的字符串

Regex 如何在正则表达式中匹配以:结尾的字符串,regex,re2,Regex,Re2,我正在使用re2.h并进行部分匹配 假设输入字符串为“123.45.34.5:8080”。应返回“123.45.34.5”和“8080” 假设输入字符串为“123.45.34.5”。“123.45.34.5”和“”也应返回。 如何编写正则表达式?以下代码不起作用 谢谢 更新 现在,下面的代码可以工作了 string IPRegex = "([^ \r\t:]*)"; string portRegex = "[ \r\t]*:?[ \r\t]*([0-9a-f]*)

我正在使用re2.h并进行部分匹配

假设输入字符串为“123.45.34.5:8080”。应返回“123.45.34.5”和“8080”

假设输入字符串为“123.45.34.5”。“123.45.34.5”和“”也应返回。 如何编写正则表达式?以下代码不起作用

谢谢

更新

现在,下面的代码可以工作了

string IPRegex = "([^ \r\t:]*)";

string portRegex = "[ \r\t]*:?[ \r\t]*([0-9a-f]*)[ \r\t]*";
但我有一个问题,为什么“string IPRegex=“([^\r\t:][*?)”;”不起作用?输入的*?*

之间有什么区别

“123.45.34.5:8080”。“123.45.34.5”

此正则表达式返回8080

:([0-9]+)
输入

“123.45.34.5”。“123.45.34.5”

这一个检查字符
是否存在。。因为它不会返回任何内容:

(\:)

为了捕获
周围的两个部分,您可以使用

^([^:]*)(?::([^:]+))?$
请参阅,结果在捕获组1和2中。(当多行模式打开时,regex演示中的
\n
用于演示目的。)

关于你的问题

为什么
string-IPRegex=“([^\r\t:][*?)”不工作?
*?
*
之间有什么区别

,但在每个字符和每个单独的字符之间匹配空字符串,因为它可以匹配空字符串

请注意,
*?
是一个惰性量词,它匹配0个或多个字符,但尽可能少。它保证量化字符类只匹配模式其余部分成功所需的尽可能多的字符。在其他正则表达式风格中,可以使用积极的前瞻
(?=:)
,但re2不支持环视


有关延迟匹配的更多详细信息,请访问和。

使用
/:.+$/
进行搜索,并将其替换为
^[^::]*
……抱歉更新问题。……显示示例字符串。
:([0-9]+)
似乎对第一次匹配起到了作用。string portRegex=“[\r\t]*?::[\r\t]*([0-9a-f]*)[\r\t]*”;谢谢“([^\r\t:][*)”可用于在“:”之前查找非空字符串,如果有一个冒号。否则,它可以返回整个非空字符串。“[\r\t]*?:[\r\t]*([0-9a-f]*)[\r\t]*”可用于在冒号后返回字符串。如果没有冒号,它将返回空字符串。但是“[\r\t]*:?[\r\t]*([0-9a-f]*)[\r\t]*”在我的情况下可以实现相同的目标。我说的对吗?我试过以上的解决方法。但如果没有冒号,第二组匹配将失败。如果出现这种情况,RE2::PartialMatch将失败。这不是我想要的。
^([^:]*)(?::([^:]+))?$