广告位联系
返回顶部
分享到

kotlin正则表达式识别年月日代码

正则表达式 来源:互联网 作者:佚名 发布时间:2026-09-19 21:39:58 人浏览
摘要

kotlin - 正则表达式,识别年月日 1 !--正则表达式日期识别,不需要处理2025.08.08的日期-- string name=date_regex(?:^|(?lt;![-\\d]))(?:(?:[2-9][0-9]{3}[-年](?:(?:0?[1-9]|1[0-2])[-月](?:0?[1-9]|[12][0-9]|3[01]))|(?:(?:0?[1-9]

kotlin - 正则表达式,识别年月日

1

<!--正则表达式日期识别,不需要处理2025.08.08的日期--> <string name="date_regex">(?:^|(?&lt;![-\\d]))(?:(?:[2-9][0-9]{3}[-年](?:(?:0?[1-9]|1[0-2])[-月](?:0?[1-9]|[12][0-9]|3[01]))|(?:(?:0?[1-9]|1[0-2])[-月](?:0?[1-9]|[12][0-9]|3[01])))(?=(?:[日号]|$|(?![-\\d]))))[日号]?</string>

结构分解

1. 向前边界检查 (?:^|(?<![-\\d]))
    (?:^|(?<![-\\d]))
    (?: ) - 非捕获分组
    ^ - 字符串开头
    | - 或者
    (?<![-\\d]) - 负向前瞻,确保前面不是 - 或数字
    作用:确保匹配的日期要么在字符串开头,要么前面不是 - 或数字

2. 日期格式主体(分两部分)
第一部分:年月日格式
    (?:[2-9][0-9]{3}[-年](?:(?:0?[1-9]|1[0-2])[-月](?:0?[1-9]|[12][0-9]|3[01]))
    [2-9][0-9]{3} - 年份:2000-9999
    [-年] - 分隔符:- 或 年
    (?:0?[1-9]|1[0-2]) - 月份:1-12(可选前导零)
    [-月] - 分隔符:- 或 月
    (?:0?[1-9]|[12][0-9]|3[01]) - 日期:1-31(可选前导零)

第二部分:月日格式
    |(?:(?:0?[1-9]|1[0-2])[-月](?:0?[1-9]|[12][0-9]|3[01]))
    与第一部分相同,只是没有年份部分

3. 向后边界检查 (?=(?:[日号]|$|(?![-\\d])))
    (?=(?:[日号]|$|(?![-\\d])))
    (?= ) - 正向前瞻
    [日号] - 后面是 日 或 号
    $ - 或者字符串结尾
    (?![-\\d]) - 或者后面不是 - 或数字
    作用:确保日期后面是有效的边界

4. 可选后缀 [日号]?
    [日号]?
    可选的 日 或 号 后缀

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

package com.example.androidkotlindemo2.patternmatcher

 

import android.graphics.Color

import android.os.Bundle

import android.text.Spannable

import android.text.SpannableString

import android.text.style.BackgroundColorSpan

import android.text.style.ForegroundColorSpan

import android.widget.TextView

import androidx.appcompat.app.AppCompatActivity

import com.example.androidkotlindemo2.R

import com.example.androidkotlindemo2.utils.LogUtils

import java.util.regex.Pattern

 

/**

 * Author : wn

 * Email : maoning20080809@163.com

 * Date : 2025/10/12 10:34

 * Description : 正则表达式 - 识别日期,年月日

 */

class PatternMatcherMainActivity : AppCompatActivity(){

 

    var resultTextView : TextView? = null

 

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

 

        setContentView(R.layout.pattern_matcher_main)

 

        resultTextView = findViewById<TextView>(R.id.pattern_matcher_result)

 

        test()

    }

 

    private fun test(){

        val regexStr = resources.getString(R.string.date_regex)

        val matcherStr = "账2025年08月08日啊,我2025年8月8日的,呢2025年8月8号咯,5.5,2015.5.5,208-08-08,啊10月10号的,2001-10-08,3001-10-08,20_2012-12-20_20,啊10月10日了,10月10日10点,05-05,5-5,2012-12-20_20_20,2025-13-20_20_20的,1-1,1-1-1,10-10-10,2025-13-11,2025-11-33,啊1000-10-10的,如果2025-12-12的,a12-12b,我们2025年12月12日干嘛2025年12月的12月12日呢"

 

        val pattern = Pattern.compile(regexStr)

        val matcher = pattern.matcher(matcherStr)

 

        val spannableString = SpannableString(matcherStr)

        while (matcher.find()){

            val start = matcher.start();

            val end = matcher.end()

 

            //设置背景颜色高亮

            val backgroundColorSpan = BackgroundColorSpan(Color.YELLOW)

            spannableString.setSpan(backgroundColorSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

 

            //设置文字颜色

            val foregroundColorSpan = ForegroundColorSpan(Color.RED)

            spannableString.setSpan(foregroundColorSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

 

            val result = matcher.group()

            LogUtils.i("匹配到:" + result)

        }

 

        resultTextView?.setText(spannableString)

    }

}

pattern_matcher_main.xml布局:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical">

 

 

    <TextView

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:gravity="center_horizontal"

        android:layout_marginTop="20dp"

        android:textSize="30sp"

        android:text="日期正则表达式\n不需要匹配2025.08.08,\n只匹配年月日,\n2025年08月08日\n2025-08-08"/>

 

    <TextView

        android:id="@+id/pattern_matcher_result"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:gravity="center"

        android:text="结果"/>

 

 

</LinearLayout>

1

<!--正则表达式日期识别,不需要处理2025.08.08的日期--> <string name="date_regex">(?:^|(?<![-\\d]))(?:(?:[2-9][0-9]{3}[-年](?:(?:0?[1-9]|1[0-2])[-月](?:0?[1-9]|[12][0-9]|3[01]))|(?:(?:0?[1-9]|1[0-2])[-月](?:0?[1-9]|[12][0-9]|3[01])))(?=(?:[日号]|$|(?![-\\d]))))[日号]?</string>


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 通配符和正则表达式介绍
    一、通配符 通配符也叫文件名替换,它主要是作用于匹配文件名,常用命令是ls、find、cp、mv。 主要用于匹配文件名 符号 作用 * 匹配任意(
  • kotlin正则表达式识别年月日代码

    kotlin正则表达式识别年月日代码
    kotlin - 正则表达式,识别年月日 1 !--正则表达式日期识别,不需要处理2025.08.08的日期-- string name=date_regex(?:^|(?lt;![-\\d]))(?:(?:[2-9][0-9]{3}[-年]
  • 正则表达式位置匹配应用介绍
    正则表达式中的位置匹配(锚点) 正则表达式不仅能匹配字符,还能匹配位置(也称为锚点或锚定)。位置匹配不消耗任何字符,只指定匹
  • 正则表达式高级用法完整介绍

    正则表达式高级用法完整介绍
    本文中的示例均在python3.11中运行成功。 如果运行出现re.error报错,可以更换python版本或者用regex模块替换re模块后再运行。 高级特性详解 贪
  • 正则表达式的整理与归纳

    正则表达式的整理与归纳
    正则表达式是由普通字符(a-z)和特殊字符(元字符)组成的文本模式。例如,在正则表达式[a-z]*描述了所有仅包含小写字母的字符串,其中a,z为
  • 正则表达式IP地址合法性判断
    一、正则表达式常见匹配字符快速回顾 符号 描述 . 匹配处换行符\n之外任意1个字符 [] 匹配[]中任意一个 \d 一个0-9数字 \D 匹配非数字 \w 匹配
  • 正则表达式中的特殊符号的介绍
    正则表达式中的特殊符号 如: 1 preg_match(/.+?hxx/is, hxx)); 返回,0,表示没有匹配,这是因为.+?的作用,具体讲一下。 .的作用 作用:匹配除换
  • S3标签字符清洗的正则表达式实践记录
    深入理解 S3 标签字符清洗的正则表达式实践 在构建与 AWS S3 相关的服务时,尤其是使用 S3 标签(Tag)作为资源标识或元数据时,确保标签值
  • 正则表达式r前缀使用指南及如何避免常见错误

    正则表达式r前缀使用指南及如何避免常见错误
    正则表达式中的r:解锁字符串转义的魔法 正则表达式是处理字符串的强大工具,但它常常伴随着转义字符的复杂性。如果你曾因\n、\t或\
  • 正则表达式高级应用与性能优化记录
    第6章:正则表达式的高级应用 6.1 模式匹配与文本处理 正则表达式不仅可以用于简单的搜索和替换,还可以用于复杂的文本处理任务,比如
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计