【问题标题】:regex parenthesis OR digit start of line正则表达式括号或数字行首
【发布时间】:2015-03-07 00:38:56
【问题描述】:

我是正则表达式的新手,并试图让这个语句通过。我要做的是检查字符串中的第一个或两个字符。

我想看看如果它以数字开头,那么该陈述将是正确的。我还想检查第一个字符是否是“(”,那么我想检查下一个数字是否也是数字。

到目前为止,我得到了:

if (str.matches("^[(?\d")){
return true;

但这似乎不起作用。 ^ 用于锚定开始, (? 检查可选括号,然后检查它是否是数字。我是怎么塞满的?

所以 0800, (0800, (09, 09, 应该通过 *08, (*0, AB, (AB, *AB) 应该失败。

谢谢

【问题讨论】:

  • 省略方括号。我不确定你认为它有什么作用。
  • 我删除了它,但它仍然无法在这里工作。只匹配带括号的那个,而不匹配其他的。尝试转义括号,但仍然无效。 iforce.co.nz/i/qn1rwgii.bf2.jpg
  • 我会为你详细介绍,但我相信@hwnd已经发布了正确答案,所以我不会打扰。

标签: java regex string object


【解决方案1】:

您需要删除左方括号并转义元字符。此外,matches() 告诉您整个字符串是否与给定的正则表达式匹配。因此,您需要在之后添加令牌.* 以贪婪地匹配字符串中的每个字符。

if (str.matches("\\(?\\d.*")) { ... }

Ideone Demo

【讨论】:

  • 所以如果我之前子串得到字符串的前两个元素,我就不需要使用.* ?
  • 这是有道理的。谢谢。几个问题:我不明白第一个反斜杠。你为什么要逃避整个事情?你不应该只想逃避括号吗?另外,您为什么要使用 \\d 转义数字, \d 不应该足够吗?为什么你把.*放在最后?这不意味着零个或多个任何字符吗?谢谢
  • 您必须在 Java 中进行双重转义。 ( 是元字符,\d 是正则表达式标记。最后的.* 将在之后消耗所有字符。
【解决方案2】:

这个正则表达式应该可以解决问题:

^\d.*|^\(\d.*

在 Java 中,反斜杠转义:

if (str.matches("^\\d.*|^\\(\\d.*"))

【讨论】:

  • 我认为您需要在 OR | 之后再添加一个行首 ^。否则,您将匹配 *AB(5 之类的内容。
  • 实际上,由于您使用的是matches,所以根本不需要^字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多