0

假设我有这个 java 字符串。请注意,有两<c></c>对仅包含数字,而另一对包含数字和字符串。我如何知道一个字符串是否<c></c>只包含 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>
4

5 回答 5

0

你非常接近,你需要添加一个“量词”。在你的情况下,一个'+'。

String keyPattern = "^<id>[0-9]+</id>$";

链接到JavaDoc for Pattern

编辑:但是,您也只会成功匹配字符串中唯一"<id>123</id>"且没有其他文本的字符串,因为您有 ^ 和 $ 锚点。

所以,如果你删除这些,你有:

String keyPattern = ".*<id>[0-9]+</id>.*";

它将匹配任何包含仅数字 ... 标签的任何字符串

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

于 2013-05-07T22:20:42.827 回答
0

如果你想匹配一个可以包含任意大小的字符串,你需要在 [0-9] 之后添加一个 + ,它看起来像这样:

[0-9]+

现在的方式只会匹配一个数字。

于 2013-05-07T22:21:20.767 回答
0

你有几个错误。

  1. 您的字符串中没有标签“< id>”或“< /id>”,您有“< /c>”。
  2. 特殊字符“^”表示它必须从字符串的开头匹配。“$” 表示它必须匹配到字符串的末尾。因此,在这种情况下,您要匹配所有内容,直到“<c>digits</c>”,然后匹配其余部分。".*" 将匹配所有内容,直到你想要的,然后你应该搜索数字,然后使用 ".*" 匹配字符串的其余部分
  3. 您只需使用“[0-9]”搜索一位数字,您需要搜索 1 个或更多,这是通过“+”符号完成的

修改后的匹配有效。

String keyPattern = ".*<c>[0-9]+</c>.*";
boolean hasKey = str.matches(keyPattern);
于 2013-05-07T22:24:58.087 回答
0

不要使用正则表达式来解析 XML。使用真正的 XML API,例如 SAX 或 DOM——或者,如果适用的话,使用一些不那么繁琐的高级 API。例如,如果您使用 XML 序列化对象,您应该查看JAXB

试图用正则表达式来做只是自找麻烦。查看相关问题及其答案:

为什么用正则表达式解析 XML 是个坏主意?

RegEx 匹配打开的标签,XHTML 自包含标签除外

于 2013-05-07T22:41:10.223 回答
-1

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

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

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

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

您也可以替换[0-9]\d一个数字

于 2013-05-07T22:22:33.120 回答