Java Word正则表达式

Java Word正则表达式,java,string,search,expression,Java,String,Search,Expression,我在Java正则表达式方面很差,所以我希望你们能帮助我 String variable = "My life is better "; String variable2 = "My life01 is better"; 现在,我必须编写一个代码,如果字符串只有“life”,它将返回true 所以我应该只对variable2为真,而不是variable2,因为它有生命,但也有“01” ~z~谢谢 我试过了 if (variable.contains("life")){ System.out.pr

我在Java正则表达式方面很差,所以我希望你们能帮助我

String variable = "My life is better ";
String variable2 = "My life01 is better";
现在,我必须编写一个代码,如果字符串只有“life”,它将返回true

所以我应该只对variable2为真,而不是variable2,因为它有生命,但也有“01”

~z~谢谢

我试过了

if (variable.contains("life")){
System.out.println("TRUE");}
这两种情况都是如此

见解决方案:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Pattern p = Pattern.compile("\\blife\\b");
        Matcher m = p.matcher("life0 is better");
        boolean b = m.find();
        System.out.println(b);

    }


}

使用单词边界
\b
匹配

有关详细信息,请参阅Java文档


请注意,您可能需要将其写入
\\b
以获得正确的转义。模式需要字符串
\b
,当在
中使用该字符串时,java
代码(而不是从文件中读取!)需要以java转义形式编写,因为
“\\blife\\b”
使用以下正则表达式:-

"\blife\b"
使用和
匹配器
类。这将匹配完整的单词。(
\b
表示单词边界)

您必须使用方法来检查字符串是否包含此模式


注意:-如果您想使用
字符串.matches
,这比使用
模式和
匹配器更合适,您必须在前面和
结尾添加
*
。因为,
String.matches
匹配整个字符串

例如:-

String str = "asdf life asdf";
System.out.println(str.matches("\\blife\\b"));       // Prints false

System.out.println(str.matches(".*\\blife\\b.*"));  // Prints true

在第二个正则表达式中,
*
匹配
life

前后的字符串使用
string.matches()
方法和正则表达式
\b
匹配单词边界

public class StringChecker {    
  String variable1 = "My life is better ";
  String variable2 = "My life01 is better";

  System.out.println("variable1: " + containsString(variable1));
  System.out.println("variable1: " + containsString(variable2));
  //Returns true if the string contains "life"
  public boolean containsString(String s){
    return s.matches(".*(\\blife\\b).*");
  }
}

你试过什么?始终共享您已经尝试过的内容。WRT edit:您尝试过哪些正则表达式?不仅仅是使用
String.matches(字符串模式)
比使用
Matcher
类容易得多吗?--我的意思是,我觉得你有点过分了…——我认为
Matcher
类只有在您想要提取匹配项时才应该直接使用。不用于简单的比较/布尔检查。@TheLima。。而且
String.matches与整个字符串不匹配
\blife\b
可以是子字符串。这就是为什么我建议使用
Matcher.find
@TheLima。。见我更新的帖子。你会知道我在说什么。:)@罗希特·贾因——我知道。我的观点是,对于一个简单的是/否检查,实现像
Matcher m=Pattern.compile(“\\blife\\b”).Matcher(str)这样的东西是不合理的;布尔检查=m.find()而不是对模式的简单更改,
boolean check=str.matches(“.*\\blife”\\b.*)
--在我看来(以及我实际的做法),只有当您想提取匹配项时才应该使用
Matcher
的实例(例如:
listl=…;/*.*/while(m.find){l.add(m.group};}
),或者在特殊情况下,例如开始/结束/包含
\\b
,例如匹配
“11.25%”
@TheLima..是的,事实上你是对的。这就是为什么我更新了我的帖子来反映这一点。谢谢你的指点。:)两者都是错误的。请先测试它。@Makky-你的解决方案,虽然结果正确,但实践上可能不正确更不用说,如果你想回答你自己的问题,你应该:1)不要回答一个基于已经解决的问题的问题。2) 将您的答案作为实际答案发布。--PS:很高兴看到Rohit对其他类似问题的回答。你能补充一些解释吗?
package com.rampukar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DemoRegx {

    public static void main(String[] args) {
        String email = "ram@example.com";
        String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
        Pattern pt_mail = Pattern.compile(EMAIL_PATTERN);
        Matcher mt_mail = pt_mail.matcher(email);
        if (mt_mail.matches()) {
            System.out.println("Valid");
        } else {
            System.out.println("In-Valid");
        }
        System.out.println("---------------------");

        String name = "Ram Pukar";
        Pattern pt_name = Pattern.compile("[a-zA-Z ]{2,}");
        Matcher mt_name = pt_name.matcher(name);
        if (mt_name.matches()) {
            System.out.println("Valid");
        } else {
            System.out.println("In-Valid");
        }
        System.out.println("---------------------");

        String user = "ram123";
        Pattern pt_user = Pattern.compile("[a-zA-Z0-9]{2,}");
        Matcher mt_user = pt_user.matcher(user);
        if (mt_user.matches()) {
            System.out.println("Valid");
        } else {
            System.out.println("In-Valid");
        }
    }
}