【问题标题】:Parse .NET json Datetime in Android在 Android 中解析 .NET json 日期时间
【发布时间】:2016-06-04 20:58:32
【问题描述】:

我正在尝试从字符串 /Date(1472665457134)/ 中提取 1472665457134/

但是,虽然正则表达式看起来是正确的,但它不起作用,为什么?

String jsondate = "/Date(1472665457134)/";

Pattern pattern = Pattern.compile("/(\\d+)(?:-(\\d+))?/");
Matcher matcher = pattern.matcher(jsondate);
if (matcher.find()) //false here!!
{
    Log.d("test", matcher.group(1));
}

【问题讨论】:

  • 您应该转义括号 - 它们用于在正则表达式中进行分组。

标签: java android regex


【解决方案1】:

说明

因为您的示例字符串非常基本,并且您尝试仅捕获日期然后仅获取数字。

([0-9]+)

此正则表达式将执行以下操作:

  • 抓取由数字组成的子字符串。

示例

现场演示

https://regex101.com/r/rV5jN6/1

示例文本

/Date(1472665457134)/

示例匹配

1472665457134

说明

NODE                     EXPLANATION
----------------------------------------------------------------------
  (                        group and capture to \1:
----------------------------------------------------------------------
    [0-9]+                   any character of: '0' to '9' (1 or more
                             times (matching the most amount
                             possible))
----------------------------------------------------------------------
  )                        end of \1
----------------------------------------------------------------------

另类

但是,如果您还需要验证是否直接在 date 之后获取括号内的数字子字符串,那么这个正则表达式就可以了。

date\(([0-9]+)\)

注意,在 Java 中,您需要将所有 \ 替换为 \\

【讨论】:

    【解决方案2】:

    试试这个正则表达式:

    \((-?\d+)\) 
    

    作为一个 Java 字符串是:

    "\\((-?\\d+)\\)"
    

    捕获组 1 将包含括号内的正数或负数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      相关资源
      最近更新 更多