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

<!--正则表达式日期识别,不需要处理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>
        结构分解
- 向前边界检查 (?:^|(?<![-\\d]))
 
(?:^|(?<![-\\d]))
(?: ) - 非捕获分组
^ - 字符串开头
| - 或者
(?<![-\\d]) - 负向前瞻,确保前面不是 - 或数字
作用:确保匹配的日期要么在字符串开头,要么前面不是 - 或数字
- 日期格式主体(分两部分)
 
第一部分:年月日格式
(?:[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. 可选后缀 \[日号\]?  
\[日号\]?  
可选的 日 或 号 后缀  
```
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