拥有此字符串:
a=123&b=456&m30:111111111&m30:22222222
到最后一次出现:
时,我需要使用正则表达式获取22222222
值。
如何使用正则表达式进行制作? String API是不可接受的。
目前我有这个正则表达式:[^:]+:(.*)
这给了我第一个。假设可能多出现一次m30:
String
答案 0 :(得分:22)
您可以使用锚点$
指定字符串的结尾:
:([^:]+)$
关于你的问题标题,基本上找到最后一次出现仅在这样的情况下有用,你想找到下面或前面的部分或找到字符本身的索引。在这种情况下,您可以简单地使用非捕获组而不是我使用的捕获组。
:(?:[^:]+)$
在这种情况下,如果相应的函数返回匹配的对象,您可能能够检索索引。
另请注意,此正则表达式中使用的否定字符类([^:]
)表示匹配除字符:
以外的所有内容,并且在字符:
之后使用此正则表达式时它将匹配不属于自己类型的相同角色的角色。
答案 1 :(得分:3)
我的建议是:
(?<=[:])(\d+)$
$
将匹配锚定到字符串的结尾(\d+)
捕获一组一个或多个数字(?<=[:])
确保仅当数字前面有冒号时才捕获数字组,但冒号本身不是捕获的一部分。请注意,在您给出的示例中没有必要这样做,因为使用(\d+)$
应该足以返回最后一组数字(匹配在结尾处的第一个非数字字符处停止)如果您想捕获在最后一次冒号后发生的任何,那么您将使用:
(?<=[:])(.+)$
但你需要确保它以 Ungreedy 模式捕获。
答案 2 :(得分:2)
您可以尝试查找每个非冒号字符,直到字符串[^:]+$
结束。
答案 3 :(得分:0)
(?:[^:]+):(.*)
您需要使用此正则表达式查找第一组。 ?:
是非捕获组修饰符。
因此,当您compile()
Pattern
时,matcher.group(1);
将始终返回22222222
输入a=123&b=456&m30:111111111&m30:22222222
。
问候。
答案 4 :(得分:0)
.*:([^:]*)$
以上应该有效。允许任何内容,然后“:”grop必须不包含“:”直到结束。
答案 5 :(得分:0)
只需用空字符串替换最后:
的所有字符。
string.replaceFirst(".*:", "");