我需要创建正则表达式以找到像012344_2.0224.71_3
或012354_5.00123.AR_3.335_8
这样的字符串中的最后一个下划线
我想用表达式[^.]+$
找到最后一部分,然后在found元素下找到下划线,但我无法处理。
希望您能帮助我:)
答案 0 :(得分:1)
只需使用一个负字符类[^_]
即可匹配除下划线以外的所有字符(这有助于确保之后没有其他下划线)和字符串$
的结尾
模式看起来像这样:
(_)[^_]*$
最后的下划线_
在捕获组中,因此您希望返回子匹配项。您将替换组1(您的下划线)。
实时观看:Regex101
请注意Regex101上绿色突出显示的部分,这是您的子匹配项,将被替换。
答案 1 :(得分:0)
答案 2 :(得分:0)
我能想到的最简单的解决方案是使用.*\K_
,但是并非所有的正则表达式都支持\K
。
否则,另一个想法是使用_(?=[^_]*$)
说明:
.*\K_
:获取所有字符,直到下划线为止。由于*
量词是贪婪的,它将一直匹配到最后一个下划线。然后\K
放弃之前的匹配,然后我们匹配下划线。
_(?=[^_]*$)
:获取非下划线字符开头的下划线,直到该行的末尾
答案 3 :(得分:0)
模式LoginRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
long totalusers = dataSnapshot.getChildrenCount();
final long userid = 100000 + totalusers;
Random random = new Random();
int n = random.nextInt();
final String password = String.valueOf(userid).concat(String.valueOf(n));
HashMap usermap = new HashMap();
usermap.put("fullname", name);
usermap.put("phonenumber", phoneNumber);
usermap.put("sponsorid", sponsorId);
usermap.put("emailid", emailId);
usermap.put("userid", userid);
UsersRef.child(String.valueOf(userid)).updateChildren(usermap).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
HashMap loginmap = new HashMap();
loginmap.put("password", password);
LoginRef.child(String.valueOf(userid)).updateChildren(loginmap).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
SendUserToUsersActivity();
Toast.makeText(AddUserActivity.this, "User Added", Toast.LENGTH_LONG).show();
} else {
String message = task.getException().getMessage();
Toast.makeText(AddUserActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show();
}
}
});
} else {
String message = task.getException().getMessage();
Toast.makeText(AddUserActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
不匹配点超过1次,然后断言字符串的结尾。将会为您提供[^.]+$
和71_3
当不再有下划线时,您要匹配的是下划线。
一种方法是使用否定的前行335_8
(如果支持的话则断言右边的字符与下划线后跟的任何字符都不匹配)
(?!.*_)