Java 如何找到与正则表达式匹配的字符串

Java 如何找到与正则表达式匹配的字符串,java,regex,Java,Regex,假设我有这个java字符串。注意有两个对,一个只包含数字,另一个包含数字和字符串。 在Java中,如何知道字符串是否只包含数字? 我这么做了,但没用 String keyPattern = "^<id>[0-9]</id>$"; boolean hasKey = str.matches(keyPattern); <start><a></a><b></b><c>addf123</

假设我有这个java字符串。注意有两个
对,一个只包含数字,另一个包含数字和字符串。 在Java中,如何知道字符串是否只包含数字? 我这么做了,但没用

    String keyPattern = "^<id>[0-9]</id>$";
    boolean hasKey = str.matches(keyPattern);

<start><a></a><b></b><c>addf123</c><d><d><c>1234</c><foo></foo><bar></bar></start>
String keyptern=“^[0-9]$”;
布尔hasKey=str.matches(keyPattern);
地址:F1231234

您非常接近,您需要添加一个“量词”。在您的例子中,是一个“+”

String keyPattern = "^<id>[0-9]+</id>$";
String keyptern=“^[0-9]+$”;
链接到

编辑:但是,您也只能成功地匹配一个字符串,其中字符串中的唯一值是
“123”
,而没有其他文本,因为您有^和$anchors

因此,如果您删除这些,您有:

String keyPattern = ".*<id>[0-9]+</id>.*";
String keyptern=“.[0-9]+.*”;
它将匹配任何只包含数字的字符串。。。标记任何地方


我怀疑您希望获取所有仅限数字的id,在这种情况下,matches(…)方法不是您想要使用的方法。。。。但这是另一个问题。

如果要匹配一个可以包含任意大小数字的字符串,则需要在[0-9]后面添加一个+,如下所示:

[0-9]+

按照现在的方式,它只能匹配一个位数

[0-9]
将匹配一个单个数字

[0-9]?
将匹配0或1位数字

[0-9]*
将匹配0或多个数字

[0-9]+
将匹配1位或多位数字


您还可以将某个数字的
[0-9]
替换为
\d

您有几个错误

  • 如果字符串中没有标记“”或“”,则 有“”
  • 特殊字符“^”表示它必须从字符串开始匹配。“$”表示它必须匹配到字符串的末尾。因此,在本例中,您希望匹配所有内容,直到“数字””,然后匹配其余内容。“*”将匹配所有内容,直到您想要的为止,然后您应该搜索数字,然后使用“*”匹配字符串的其余部分
  • 您只使用一个带有“[0-9]”的数字进行搜索。您需要搜索一个或多个数字,这是使用“+”符号完成的
  • 修改后的匹配有效

    String keyPattern = ".*<c>[0-9]+</c>.*";
    boolean hasKey = str.matches(keyPattern);
    
    String keyptern=“.[0-9]+.*”;
    布尔hasKey=str.matches(keyPattern);
    
    不要使用正则表达式解析XML。使用真正的XML API,如SAX或DOM——或者,如果适用,使用更高级的API,使用起来不那么繁琐。例如,如果您使用XML来序列化对象,您应该查看

    试图用正则表达式实现这一点只会自找麻烦。参见相关问题及其答案:


    一般来说,您应该使用XML解析器正确解析数据。使用正则表达式解析不是正确的做法。请不要使用正则表达式解析XML。请参阅此keyPattern在使用str.matches时将与字符串不匹配