Regex 如何在正则表达式中匹配以:结尾的字符串
我正在使用re2.h并进行部分匹配 假设输入字符串为“123.45.34.5:8080”。应返回“123.45.34.5”和“8080” 假设输入字符串为“123.45.34.5”。“123.45.34.5”和“”也应返回。 如何编写正则表达式?以下代码不起作用 谢谢 更新 现在,下面的代码可以工作了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]*)
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将失败。这不是我想要的。
^([^:]*)(?::([^:]+))?$