ᅟ<span class="date">Updated: 2025-04-20 09:53</span> ollama pull gemma:2b ollama run gemma:2b ollama run deepseek-r1:1.5b ollama list ollama serve ollama pull nomic-embed-text set OLLAMA_ORIGINS=app://obsidian.md* ollama serve https://zhuanlan.zhihu.com/p/695840171 ## 常用 正則表達式 在文本的查找和替換等情況下使用----沒有熟練掌握之前,不要輕易用於正式的文本,每一步都要小心 最常用的如下: 所有字符都是文字,除了: `. * ? + ( ) { } [ ] ^ $ \`。用这些字符代表文字,需在前面加一个` \`。 一个文字是一个与它自己相匹配的字符。例如,搜索 "\?" 会匹配每一个在文档中的 "?" ,或搜索 "Hello" 会匹配每一个在文档中的 "Hello" 。 | | | | --------- | --------------------------------------------- | | | | | \ | 把下一个字符标记为一个**特殊字符**,一个**文字**,或一个**反向引用**。例如,正則表達式中,'n' 代表文字 "n" ,而`\n`代表一个换行符号,`\\`代表文字 `\`, `\(`代表文字`(`。 | | `^` | 匹配输入字符串(某一行)的开始位置。例如,`^e` 表示任何由 "e" 开头的字符串。 | | `
| 匹配输入字符串(某一行)的结尾位置。例如,"equot; 表示任何由 "e" 结尾的字符串。 | | . | 与任何单一字符串匹配。例如,".e" 匹配任何在 "e" 之前的文字,如 "he","we",或 "me"。 在 EmEditor Professional 中,当**正则表达式 "." 匹配换行符**复选框被勾选時,它匹配**搜索正则表达式的附近行**文本框中指定范围内的换行。 | | {n} | n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不匹配 "Bob" 中的 "o",但与 "food" 中的两个 o 匹配。 | | {n,} | n 是一个非负整数。匹配至少 n 次。例如,'o{2,}' 不匹配 "Bob" 中的 "o",单匹配 "foooood" 中的所有 o。and matches all the o's in "foooood". "o{1,}" 等同于  'o+'。 'o{0,}' 等同与 'o*'。 | | {n,m} | m 和 n 都要是非负整数,n <= m。匹配至少 n 次,最多 m 次。例如,"o{1,3}" 与 "fooooood"中的前三个 o 向匹配。 'o{0,1}' 等同于 'o?'。要注意的是你不能在逗号与数字之间加一个空格。 | | `*` | 匹配之前的字符或子表达式零次或多次。例如,`zo*` 会匹配 "z" 以及 "zoo"。`*` 等同于 {0,}。 | | + | 匹配之前的字符或子表达式一次或多次。例如,'zo+' 匹配 "zo" 以及 "zoo",但不匹配 "z"。 + 等同于 {1,}。 <br>在任何其他数量词 `*, +, ?, {n,}, {n,m}`之後时,**盡可能多地**占有重復。匹配前項,同时不返回任何内容。 | | ? | 匹配之前的字符或子表达式零次或一次。例如,"do(es)?" 匹配 "do" 在  "do" 或 "does" 中。? 等同于 {0,1}。 | | ? | 在任何其他数量词`*, +, ?, {n}, {n,}, {n,m}`之後时,匹配的模式**是非贪**婪。一个非贪婪模式尽可能少地与搜索字符串匹配,而默认的**贪婪模式**则尽可能多地与搜索字符串匹配。例如,字符串 "oooo",'o+?' 匹配单一的一个 "o",而 'o+' 匹配所有 'o'。 | | [xyz] | 字符集。匹配任何在括号内的字符。例如,'[abc]' 与 "plain" 中的 'a' 相匹配。 | | `[^xyz]` | 负字符集。匹配任何不在括号内的字符。例如,`[^abc]` 与 "plain" 中的 'p' 相匹配。 | | `[a-z]` | 字符范围。与任何指定范围的字符相匹配。例如,'[a-z]' 与任何 'a' 到 'z' 的小写字母相匹配。 | | `[^a-z]` | 负字符范围。与任何不在指定范围内的字符相匹配。例如,'[a-z]' 与任何不在 'a' 到 'z' 范围内的字符相匹配。 | | \d | 任何 0-9 的数字。 | | \n | 换行字符。 | | x\|y | 与 x 或 y 向匹配。例如,'z\|food' 与 "z" 或 "food" 匹配。'(z\|f)ood' 与 "zood" 或 "food" 匹配。 | | (pattern) | 括号有两个作用: 把一个格式组合到一个子表达式中,以及捕捉生成该匹配的格式。例如,表达式 `(ab)*` 匹配所有字符串 "ababab"。 <br>每一个子表达式的匹配被捕捉为一个从左到右编号的**反向引用**(如下)。要匹配括号字符,用`\(`或`\)`。 | | \1 - \9 | 指定一个**反向引用**。一个反向引用,是对上一个被匹配的**子表达式**的引用。引用的内容是与子表达式相匹配的内容,而不是表达式本身。 <br>一个反向引用由转义符 `\` 加一个 "1" 到 "9" 的数字组成。`\1` 指的是第一个子表达式,`\2` 是第 2 个,以此类推。例如,`(a)\1` 会捕捉 "a" 为第一个反向引用,并匹配任何 "aa" 文本。 <br>在**替换**时,可以用反向引用来定位一个文本格式,与之相匹配的文本能被一个指定的反向引用替换。例如,"(h)(e)" 的表达式会在文本中查找 "he",把` \1`放在**替换为**文本框中会用 "h" 取代 "he", 而如果是`\2\1` 的话,则会用 "eh" 取代 "he" 。 | 更多: EmEditor 帮助 正则表达式语法 (此頁面可能是機器翻譯) https://www.emeditor.org/zh-cn/howto_search_search_regexp_syntax.html Boost.Regex正则表达式语法 https://www.boost.org/doc/libs/1_76_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html http://perldoc.perl.org/perlre.html Onigmo: Unicode 属性 UnicodeProps.txt https://github.com/k-takata/Onigmo/blob/master/doc/UnicodeProps.txt Onigmo: 正则表达式语法 https://github.com/k-takata/Onigmo/blob/master/doc/RE ## 進階 ᅟ运算符`|`ᅟ将匹配它的任何一个参数,例如:`abc|def`将匹配“abc”或“def”。`(?:abc|def)` ᅟᅟ括号可用于对交替进行分组,例如:`ab(d|ef)` 将匹配“abd”或“abef”。`ab(?:d|ef)` ᅟᅟ空替代是不允许的(这几乎总是一个错误),但可以使用`(?:)`作为占位符,例如:`|abc`不是一个有效的表达式,但是可以用`(?:)|abc`或`(?:abc)??`。詳見下文。 ᅟᅟ ᅟ`(?<name>pattern)`ᅟ捕获与 "pattern" 匹配的字符串到 "name" 捕获组中。 ᅟ`\k`转义符ᅟ可用于引用命名的子表达式,例如 `\k<two>`匹配任何与名为“two”的子表达式匹配的内容。 ᅟ`\k<name>`ᅟ表示一个已命名的反向引用。如果 "name" 是一个数字,则它表示一个已编号的反向引用,相当于 `\1`,`\2`,`\3`,... ᅟᅟ ᅟ`\1 - \9`ᅟ指定一个反向引用。一个反向引用是上一个被匹配的子表达式的引用。引用的内容是与子表达式相匹配的内容,而不是表达式本身。 ᅟ`\g`转义符ᅟ对相同的功能还可以使用 `\g` 转义符,例如: ᅟ`\g1`ᅟ匹配任何匹配的子表达式 1 ᅟ`\g{1}`ᅟ匹配任何匹配的子表达式 1:这种形式允许在类似或索引高于 9 的 情况下更安全地解析表达式,如`\g{1234}` ᅟ`\g{-1}`ᅟ匹配与最后打开的子表达式匹配的任何内容 ᅟ`\g{-2}`ᅟ匹配与最后一个打开的子表达式匹配的任何内容 ᅟ`\g{one}`ᅟ匹配任何与名为“one”的子表达式匹配的内容 ᅟ请注意,后向引用也可以是对尚未出现的子表达式的前向引用——这仅在重复中才真正有意义,例如`(\2two|(one))+`将匹配“oneonetwo”。ᅟ ᅟᅟ ᅟ不能用反向引用来存储的非捕获匹配:ᅟ ᅟ`(?:pattern)`ᅟ通常和 "or" 字符 `(|)` 组合使用。例如,industr(?:y|ies) 比 'industry|industries' 更实用。 ᅟ不包含换行:ᅟ ᅟ`(?=pattern)`ᅟ执行匹配look-ahead搜索。例如,`x(?=abc)` 与 "x"相匹配仅当字符串后面跟着 "abc" 表达式时。acxabcxbc ᅟ`(?<=pattern)`ᅟ执行匹配look-behind搜索。例如,`(?<=abc)x`。模式必须是固定长度。 ᅟ`(?!pattern)`ᅟ执行非匹配look-ahead搜索。例如,`x(?!abc)` 与 "x" 相匹配只有当该字符串后面不跟着 "abc" 表达式时。 ᅟ`(?<!pattern)`ᅟ执行非匹配look-behind搜索。例如,`(?<!abc)x`。模式必须是固定长度。 ᅟᅟ例:`\b(?!\S{20})\S*截图\S*\b` ᅟᅟ 匹配除了百分號以外的任何標點符號字符。 `(?!%)[[:punct:]]`ᅟᅟ`((?!%)[[:punct:]])+` `[[:punct:]&&[^%]]`ᅟᅟOnigmo引擎 `[[:punct:]]`ᅟPOSIX 字符類,用於匹配所有的標點符號。 `(?!%)`ᅟ負向先行斷言,表示匹配後面不是百分號`(%)`的位置。 `&&`ᅟ交集操作符,用於結合兩個字符類。 选出只含一个元音字母且无重复字母的单词: `\b(?!(?:[a-zA-Z])*([a-zA-Z])(?:[a-zA-Z])*\1)[^aeiouAEIOU\W\d_]*[aeiouAEIOU][^aeiouAEIOU\W\d_]*\b` 条件表达式ᅟ`(?(数字)pattern)`ᅟ如果第几个子表达式匹配成功,那么继续匹配后面的;否则,后面的就当不存在。`(\d)(A)?(?(2)B)`:<font color="#ff0000">8AB</font> <font color="#ff0000">8</font>A <font color="#ff0000">3</font>BB <font color="#ff0000">2</font> ᅟ`(?(数字)|pattern)`ᅟ如果第几个子表达式匹配不成功,那么继续匹配后面的;否则,后面的就当不存在。`(\d)(A)?(?(2)|B)`:<font color="#ff0000">8A</font>B <font color="#ff0000">8A</font> <font color="#ff0000">3B</font>B 2 ᅟᅟ ᅟ`\K`ᅟ是部分正则引擎独有的语法,截断`\K`前的内容,保留`\K`后的内容,类似逆向环视。 ᅟᅟ比如,`\d+\Ka`表示匹配前面有数字的字母a,正常用环视实现是`(?<=\d+)a`。二者效果一样,只是ee用的Perl正则引擎不支持逆向变长环视,所以用`\K`替代。 ᅟᅟ ᅟ`\<`ᅟ匹配一个单词的开头。(仅限 Boost.Regex) ᅟ`\>`ᅟ匹配一个单词的结尾。(仅限 Boost.Regex) ᅟ`\b`ᅟ匹配单词的边界(一个单词的开头或结尾)。 ᅟ`\B`ᅟ仅当不在单词边界处时匹配。 ᅟᅟ ᅟ`\w`ᅟ任何单词字符 - 字母.数字.字符.下划线。在Boost.Regex中可以匹配汉字。 ᅟ`\W`ᅟ`\w` 的补集 - 查找任何非单词的字符。 ᅟ`\s`ᅟ任何空白字符。 ᅟ`\S`ᅟ`\s` 的补集。 ᅟ`\d`ᅟ任何 0-9 的数字。 ᅟ`\D`ᅟ`\d` 的补集。 ᅟ`\l`ᅟ任何 a-z 的小写字符。 ᅟ`\L`ᅟ`\l` 的补集。 ᅟ`\u`ᅟ任何 A-Z 的大写字符。 ᅟ`\U`ᅟ`\u` 补集。 ᅟ`\C`ᅟ任何单一字符,等同与 '.'。 ᅟ`\Q…\E`ᅟ中間可以直接放入文本,如:`\Q(\d+)(_1)\E`,查找`(\d+)(_1)`。 ᅟᅟ ᅟ换行ᅟ ᅟ`\r\n`ᅟCR+LF, ᅟ`\r`ᅟCR, ᅟ`\n`ᅟLF。 ᅟᅟ通常,CR+LF (`\r\n`) 被用在 Windows 操作系统中, ᅟᅟCR (`\r`) 被用在 Macintosh 上, ᅟᅟ还有 LF (`\n`) 被用于 Unix。 ## 替换 ᅟ替换表达式语法 ᅟ当用正则表达式或数字范围取代时,可以用替换表达式。 ᅟ`\0`ᅟ把整个正则表达式作为指定为反向引用。 ᅟ`\1 - \9`ᅟ指定一个反向引用 - 一个反向引用是上一个被匹配的子表达式的引用。 ᅟ`$10, $11, $12, ...`ᅟ表示超过 9 个的反向引用。相当于 `\k<10>`,`\k<11>`,`\k<12>`,...。 ᅟ`\k<name>`ᅟ引用已命名的捕获组。如果 "name" 是一个数字,则它表示一个已编号的反向引用,相当于 `\1`,`\2`,`\3`,... ᅟ`\n`ᅟ一个换行符。 ᅟ`\r`ᅟ在在文件中替换表示一个回车符。请参考指定换行符。 ᅟ`\t`ᅟ一个 tab。 ᅟ`\L…\E`ᅟ小写。 `\L` 接着的字符均小写直到`\E` ᅟ`\U…\E`ᅟ大写。 `\U` 接着的字符均大写直到`\E` ᅟ`\H…\E`ᅟ半角字符。 ᅟ`\F…\E`ᅟ全角字符。 ᅟ`\Nc…\E`ᅟUnicode标准化表单C(规范组成)。 ᅟ`\Nd…\E`ᅟUnicode标准化表单D(规范分解)。 (同C) ᅟ`\NC…\E`ᅟUnicode标准化表单KC(兼容性组成)。 ᅟ`\ND…\E`ᅟUnicode标准化表单KD(兼容性分解)。 (同KC) 替換窗口中: $(Filename) 文件名 $(FilenameEx) 文件名+擴展名 js中: 輸出路徑 document.CopyFullName(); 賦值:var AText = document.FullName; var dText = document.Name; // 使用正则表达式提取不带扩展名的文件名 `var dText= dText.replace(/\.[^\.]+$/, "");` `dText = AText.replace(/.*[\\\/]([^\\\/]+)\.md/g, "$1");` ``` // 提取文件名 var selectedTexta = ""; var regex = /[\\\/]([^\\\/]+)(?=\.\w+$)/; var match = dText.match(regex); if (match) { selectedTexta = match[1]; // 提取匹配的文本 } ``` 批量對文件第一行操作: 文件夾中查找替換: 查找`\A.+\z`,正則中`.`設為能表達`\n`。替換`abcd\0`。 〔兼容文字〕〔兼容增补〕C 〔康熙部首〕⻳⺟〔谚文兼容〕KC(兼容性组成) ヿ〔片假名〕ᅟコトᅟKC(兼容性组成) ゛〔平假名〕ᅟ ゙ᅟKC(兼容性组成) 查找:`([「『])|([』」])` 替換:`(?{1}“:”)` ᅟ`(?Ntrue_expression:false_expression)`ᅟ如果匹配子表达式 N,则评估 `true_expression` 并将其发送到输出,否则评估 `false_expression` 并将其发送到输出。例如,(?1foo:bar),如果匹配子表达式 `\1`,会用 foo替换每个匹配,反之则用 bar。另外,您也可以用这种方式写该表达式:`(?{1}foo:bar)` ᅟ`$(Path)`ᅟ文件路径。 ᅟ`$(Dir)`ᅟ文件目录。 ᅟ`$(Filename)`ᅟ不带扩展名的文件名。 ᅟ`$(FilenameEx)`ᅟ带扩展名的文件名。 ᅟ`$(Ext)`ᅟ扩展名。 ᅟ`$(Lines)`ᅟ行数(不能用于在文件中替换)。 ᅟ`$(CsvColumns)`ᅟCSV 列数(不能用于在文件中替换)。 查找:`([「『])|([』」])` 替換:`(?{1}“:”)` ## 12445備用 稱友疏: ``` #\K(\d+)(?=@ ) \J (\1-1); ``` ``` \[P(\d+)([ab])\] \J "[[_assets/要解.pdf#page="+(\1+4)+"|P\1\2]]"; \[\[_assets/要解.pdf#page=\d+\|P\d+([ab])\]\] ``` ### 科判: ``` on ^#[# ]+ (F) ##\1 R on ^#[# ]+ (G) ###\1 R on ^#[# ]+ (H) #### \1 R on ^#[# ]+ (I) ##### \1 R on ^#[# ]+ (J) ####\1 R on ^#[# ]+ (K) #####\1 R on ^#[# ]+ (L) ######\1 R on ^#[# ]+ (M) #######\1 R on ^#[# ]+ (N) ######## \1 R on ^#[# ]+ (O) ######### \1 R on ^#[# ]+ (P) ########\1 R on ^#[# ]+ (Q) #########\1 R on ^#[# ]+ (R) ##########\1 R on ^#[# ]+ (S) ###########\1 R on ^#[# ]+ (T) ############ \1 R on ^#[# ]+ (U) ############# \1 R on ^#[# ]+ (V) ############\1 R on ^#[# ]+ (W) #############\1 R on ^#[# ]+ (X) ##############\1 R on ^#[# ]+ (Y) ###############\1 R on ^#[# ]+ (Z) ################\1 R ``` ## JavaScript `\J`ᅟ指定表达式使用 JavaScript。`\J` 必须放在替换表达式的开头。 ᅟ可以与反向引用结合使用。还可以在脚本中使用 cell 函数。例如, ᅟ替换表达式ᅟ含义 ᅟ`\J "\0" + "abc"`ᅟ合并匹配字符串与 "abc" ᅟ`\J "\0".substr( 0, 5 );`ᅟ返回匹配字符串的前 5 个字符 ᅟ`\J \0 * 100;`ᅟ将匹配的数字乘以 100 ᅟ`\J parseFloat( \0 ).toFixed(2);`ᅟ将匹配的数字四舍五入到小数点后 2 位 ᅟ`\J cell( -1 )`ᅟ返回位于匹配单元格左侧相邻单元格中的文本 ᅟ`\J parseFloat( cell( -1 ) ) + parseFloat( cell( -2 ) )`ᅟ返回左侧两个相邻单元格的总和 `〖40_1〗`指定數值加3,加5 查找:`〖(\d+)(_1)` 替换:`\J "〖"+(\1+3)+"\2";` 查找:`〖\K(\d+)_(\d+)(?=〗)` 全部替换(單個會跳躍替换):`\J String(\1+3)+"_"+String(\2+5)` 查找句号后面跟着的一串大写字母,替换为大写字母的个数。 查找:`。\K[A-Z]+` 替换:`\J "\0".length` 字符串長度 查找:`【(.+)】.+@}` 替换:`\J "\0"+"\1".length` 查找大於150的數,並加1 查找:`〖\K(\d+)(?=〗)` 替换:`\J \1+1`ᅟᅟ`\J (\0+1)` `\J '\0'*1>150?'\0'*1+1:'\0'` `\J Str="\0"; if (Str >150) Number(Str)+1;` `\J Num=Number("\0"); if (Num >=150) Num+1;` 如果要包含150的话 条件就改成 `>=` 查找:`(SA)(\d+)` 替换:`\J Num=Number("\2"); if (Num <= 641) "[SA](1-641#\2)"; else "[SA](642-1362#\2)";` 分三段,用`三元条件运算符`或`else if`或`if加else`嵌套 替换:`\J n='\2';{n<=64?'[SA](1-64#\2)':(n <= 100)?'[SA](65-100#\2)':'[SA](101-160#\2)'};` 替换:`\J n='\2';if(n<=64){'[SA](1-64#\2)';}else if(n <= 100){'[SA](65-100#\2)';}else{'[SA](101-160#\2)';}` 替换:`\J Num=Number("\2"); (Num <= 64) ? "[SA](1-64#\2)" : (Num <= 100) ? "[SA](65-100#\2)" : "[SA](101-160#\2)";` 替换:`\J Num=Number("\2"); if (Num <= 64) {"[SA](1-64#\2)";} else {if (Num <= 100) {"[SA](65-100#\2)";} else "[SA](101-1362#\2)";}` 替换:`\J Num=Number("\2"); if (Num <= 64) "[SA](1-64#\2)"; else {if (Num <= 100) "[SA](65-100#\2)"; else "[SA](101-1362#\2)";}` 三元条件运算符的嵌套 ``` let score = 85; // 假设这是一个学生的分数 let grade = (score >= 90) ? 'A' : (score >= 80) ? (score >= 85 ? 'B+' : 'B') : (score >= 70) ? 'C' : (score >= 60) ? 'D' : 'F'; console.log('成绩等级:', grade); // 输出: 成绩等级: B+ ``` 芽子 葉子●戒子●芽子●式子●工子●芽子●工子 芽子 葉子●戒子●芽子★式子●工子●芽子★工子 ``` 查找^(.+) (.+)$ 替換 \J var a='\1'; '\1 '+'\2'.replace(new RegExp(a+'●','g'),a+'★') \J var a='\1'; '\1 '+'\2'.replace(new RegExp(a+'●','g'),a+'★'); \J var a='\1'; '\1 '+'\2'.replace(new RegExp(a.replace(/\\/g, '\\\\')+'●','g'),a+'★'); \J '\\0'.replace(new RegExp('\\1●','g'),'\\1★'); \J var a='\1'; '\1 '+'\2'.replace(new RegExp(a.replace(/\\/g, '\\\\')+'●','g'),a+'★').replace(/^([^★]+●)[^●★]+★/, '\$1'); \J '\\0'.replace(new RegExp('\\1●','g'),'\\1★').replace(/^([^★]+●)[^●★]+★/, '\$1'); ^(.+) (.+)$ \V '\2'.replace(new RegExp('\1●','g'),'') \V '\0'.replace(new RegExp('\1●','g'),'\1★') \J var a='\1'; '\1 '+'\2'.replace(new RegExp(a+'·','g'),'') ``` 補齊五位數 ``` #\^sa(\d+) \J Num=Number("\1"); "#^sa" + ("0000" + Num).slice(-5); \.\[(\d+)\]\(http://agama\.buddhason\.org/(MA)/dm\.php\?keyword=\1\) .[\1](agamdm#^ma\1) \J Num=Number("\1"); ".[\1](agamdm#^ma" + ("00" + Num).slice(-3) + ")"; \.\[(\d+)\]\(http://agama\.buddhason\.org/(DA)/dm\.php\?keyword=\1\) .[\1](agamdm#^da\1) \J Num=Number("\1"); ".[\1](agamdm#^da" + ("0" + Num).slice(-2) + ")"; \(http://agama\.buddhason\.org/AA/dm\.php\?keyword=(\d+)\.(\d+)\) (agamaa#^aa\1z\2) \(http://agama\.buddhason\.org/SA/dm\.php\?keyword=(\d+)\) (agamas#^sa\1) \J Num=Number("\1"); ".[\1](agamas#^sa" + ("000" + Num).slice(-4) + ")"; ``` `<p class="daoh"><a href="(\d+).html">上一页</a> <a href="(\d+).html">当前页</a> <a href="(\d+).html">下一页</a></p>` 上一页是`\2-1`,下一页是`\2+1` 查找:`(\d+)(\Q.html">上一页</a> <a href="\E)(\d+)(\Q.html">当前页</a> <a href="\E)(\d+)(\Q.html">下一页</a></p>\E)` 替换:`\J String(\3-1)+"\2"+"\3"+"\4"+String(\3+1)+"\6"` `(f|(?!^)\G).*?\K\d` `123g678123f6718123d678` `123g678123f******d***` `f\K[^f]*\d` `\J "\0".replace(/\d/g, '*')` `\D`ᅟ如果 数字范围表达式的日期/时间类型用于匹配字符串,则此表达式可以指定日期格式。它可以与 `\T` 结合使用。查看可用的日、月、年格式图片。例如,如果匹配的日期/时间是 `2022-03-31 21:30`:(示例的语言环境是英语(美国)) ᅟ替换表达式 结果 ᅟ`\DM/d/yyyy` 3/31/2022 ᅟ\DMMMM, d, yyyy` March 31, 2022 ᅟ`\D'month='M 'day='d \THH:mm` month=3 day=31 21:30 `\T`ᅟ如果 数字范围表达式的日期/时间类型用于匹配字符串,则此表达式可以指定时间格式。它可以与 `\D` 结合使用。查看可用小时、分钟 , 和第二种格式的图片。`.*?`例如,如果匹配的日期/时间是 `2022-03-31 21:30`:(示例的语言环境是英语(美国)) 替换表达式 结果 ᅟ`\THH:mm` 21:30 ᅟ`\Th:mm tt` 9:30 PM ᅟ`\THH:mm\D-yyyy-MM-dd` `21:30-2022-03-31` ------- `".*?"`ᅟ被双引号包围字符串 `\[[^\[]*?\]`ᅟ被`[ ]`包围的字符串 变量名称:ᅟ`[a-zA-Z_][a-zA-Z_0-9]*` IP 地址:ᅟ`([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})` URL:ᅟ`(\S+)://([^:/]+)(:(\d+))?(/[^#\s]*)(#(\S+))?` `\s+?
ᅟ清除尾部空格 把 `(abc)` 替换为 `[abc]` ᅟ查找: `\((.*?)\)` ᅟ替换为: `\[\1\]` 把 `<H3 ...>` 替换为 `<H4 ...>` ᅟ查找: `<H3(.*?)>` ᅟ替换为: `<H4\1>` 把 `9/13/2003` 替换为 `2003.9.13` ᅟ查找: `([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})` ᅟ替换为: `\3\.\1\.\2` a 到 z 的大写字符 ᅟ查找: `[a-z]` ᅟ替换为: `\U\0` 使所有单字大写 ᅟ查找: `([a-zA-Z])([a-zA-Z]*)` ᅟ替换为: `\U\1\L\2` 查找大小写字母前面的3-5位的数字 ᅟ`\d{3,5}(?=[a-zA-Z])` ᅟ`-` 一行數字,每三个数就增加一个逗号 ᅟ`(\d)(?=(?:\d{3})+$)` ᅟ`$1,` 行首以`未知`開頭,本行行首不包括`(.+二)` `^(?!.+二)^未知` 行首以`(.*n)`開頭,本行行首不包括`(.*n){3}` `^(?!(.*n){3})^(.*n)` ## Perl Boost.Regex正则表达式语法 Perl Regular Expression Syntax - 1.81.0.html https://www.boost.org/doc/libs/1_81_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html http://perldoc.perl.org/perlre.html perlre - Perl regular expressions - Perldoc Browser.html 字符类 形式为`[[:name:]]`的表达式与命名字符类“name”匹配,例如`[[:lower:]]`与任何小写字符匹配。请参见字符类名称`std_char_classes.html`。 排序元素 形式为`[[.col.]]`的表达式与排序元素col匹配。排序元素是作为单个单元进行排序的任何单个字符或任何字符序列。排序元素也可以用作范围的终点,例如:`[[.ae.]-c]`匹配字符序列“ae”,加上范围“ae”-c中的任何单个字符,假设“ae”在当前区域设置中被视为单个排序元素。 作为扩展,排序元素也可以通过其符号名称(https://www.boost.org/doc/libs/1_76_0/libs/regex/doc/html/boost_regex/syntax/collating_names.html )指定,例如:`[[.NUL.]]`匹配\0个字符。 等价类 形式为`[[=col=]]`的表达式匹配主排序关键字与排序元素col的主排序关键字相同的任何字符或排序元素,因为对于排序元素,名称col可以是符号名称。主排序键是一个忽略大小写、重音或特定于区域设置的尾随的键;因此,例如`[[=a=]]`匹配任何字符:a,à,Á,â,É,Å,a,à、á、â、ã、ä和å。不幸的是,这一点的实现依赖于平台的整理和本地化支持;不能依赖这个功能在所有平台上,甚至在一个平台上的所有地方进行可移植的工作。 `([aeiouüêāáàēéěèáàāáǎâéèēéěêīíìīíǐìōóòōóǒòūúùü]+)(r|ng?)*` `([[=a=][=o=][=e=][=i=][=u=]]+)(r|ng?)*` `([zcs]h|[bpmfdtnlgkhjqxrzcsyw])?\K([[=a=][=o=][=e=][=i=][=u=]]+)(r|ng?)*` 转义字符 字符类定义中允许所有与单个字符或单个字符类匹配的转义序列。例如,`[\[\]]`将匹配[或]中的任何一个,而`[\d\W]`将匹配任何是“数字”或不是“单词”字符的字符。 组合 以上所有内容都可以组合在一个字符集声明中,例如:`[[:digital:]a-c[.NUL.]]`。 `\a` `\a` `\e` `0x1B` `\f` `\f` `\n` `\n` `\r` `\r` `\t` `\t` `\v` `\v` `\b` `\b(但仅在字符类声明中)。 `\cX` ASCII 转义序列 - 代码点为 X % 32 的字符 `\xdd` 十六进制转义序列 - 匹配代码点为 0xdd 的单个字符。 `\x{dddd}` 十六进制转义序列 - 匹配代码点为 0xdddd 的单个字符。 `\0ddd` 八进制转义序列 - 匹配代码点为 0ddd 的单个字符。 `\N{name}` 匹配具有符号名称 name 的单个字符。例如`\N{newline}` 匹配单个字符 `\n`。 转义序列 相当于 `\d` `[[:digit:]]` `\l` `[[:lower:]]` `\s` `[[:space:]]` `\u` `[[:upper:]]` `\w` `[[:word:]]` `\h` 水平空白 `\v` 垂直空白 `\D` `[^[:digit:]]` `\L` `[^[:lower:]]` `\S` `[^[:space:]]` `\U` `[^[:upper:]]` `\W` `[^[:word:]]` `\H` 不是水平空格 `\V` 非垂直空格 形式ᅟᅟᅟ等效字符集形式ᅟᅟᅟ描述 `\pX`ᅟᅟᅟ`[[:X:]]`ᅟᅟᅟ匹配任何具有属性 X 的字符。 `\p{Name}`ᅟᅟᅟ`[[:Name:]]`ᅟᅟᅟ匹配任何具有属性名称的字符。 `\PX`ᅟᅟᅟ`[^[:X:]]`ᅟᅟᅟ匹配任何不具有属性 X 的字符。 `\P{Name}`ᅟᅟᅟ[^[:Name:]]`ᅟᅟᅟ匹配任何没有属性名称的字符。 例如,`\pd`匹配任何“数字”字符,就像`\p{digit}`.ᅟ 词边界 ``` 以下转义序列匹配单词的边界: <匹配单词的开头。 >匹配单词的结尾。 \b匹配单词边界(单词的开头或结尾)。 \B仅当不在单词边界时才匹配。 ``` 缓冲区边界 ``` 以下仅在缓冲区边界匹配:此上下文中的“缓冲区”是要匹配的整个输入文本(请注意,^ 和 $ 可能匹配文本中嵌入的换行符)。 \` 仅在缓冲区的开头匹配。 \' 仅匹配缓冲区的末尾。 \A 仅匹配缓冲区的开头(与\`相同)。 \z 仅匹配缓冲区的末尾(与\'相同)。 \Z 匹配一个零宽度断言,该断言由缓冲区末尾的可选换行符序列组成:等同于正则表达式(?=\v*\z)。请注意,这与(?=\n?\z)表现得好像匹配的 Perl 略有不同 。 dsfaassdaaaasssssaaswwwaawwwsaaw ``` 持續转义`\G` ``` \G表示光標當前的位置,或者到行首。可以從行首或其他匹配字串的開始部分循環匹配(贪婪模式內部不循環)。 如果您正在遍历包含在文本中的匹配项,并且您希望每个子序列匹配项都从此前匹配项结束的地方开始,则此转义很有用。 该序列\G仅在找到的前一匹配项的末尾匹配,或者如果没有找到先前的匹配项,则在匹配文本行的开头匹配。 -----------(?!^)也可以用(?<!^)----- (◤|(?!^)\G)[^◤]*?\Kaa匹配◤後所有的aa,一次性換成ā: ★0yaḥ praatyayabaalena sa upapadyamānaḥ / [250|24] ◤yaḥ praatyaayabalena sa upapaadyamānaaḥ / [S554] ㈠若由緣力斷善根aa。是正生時接善根。 ----------- (-[db]|\G)[^-x]*\Kx,會選擇行首後面的x。 (-[db]|(?!^)\G)[^-x]*\Kx,或 (-[db]|(?!^)\G)[^-]*?\Kx,替换所有跟在b或d之后的x爲o:(可以一次完成,不用多次循環) x xxx- x x xx -a x x xx x x -b x x x x xx x -c x x x x x x -d x x x xx x x 變爲: x xxx- x x xx -a x x xx x x -b o o o o oo o -c x x x x x x -d o o o oo o o [db]\K[^\-]*x \J "\0".replace(/x/g, '0') ----------- (f|(?!^)\G)\K\d,如果要把f后的数字都变成*,能一次完成。 123g678123f678123d678 f\K\d+ \J "\0".replace(/./g, '*') ----------- (f|(?!^)\G).*?\K\d 123g678123f6718123d678 123g678123f******d*** f\K[^f]*\d \J "\0".replace(/\d/g, '*') ----------- \G'[a-z] 匹配下行中的'a'b'c,后面的'e'f'g则不匹配。 'a'b'c"d'e'f'g ----------- \G\(\d\) 匹配下行中的 "(1)"、 "(3)" 和 "(5)"。 (1)(3)(5)[7](9) ----------- ``` 引用转义 ``` 转义序列\Q开始一个“引用序列”:所有后续字符都被视为文字,直到找到正则表达式或 \E 的结尾。例如表达式:\Q*+\Ea+ 将匹配以下任一项: \*+a \*+aaa ``` Unicode 转义 ``` \C 匹配单个代码点:在 Boost 正则表达式中,这与“.”具有完全相同的效果。 \X 匹配组合字符序列:即任何非组合字符后跟零个或多个组合字符的序列。 匹配行尾 \R 匹配任何行结束字符序列,它与表达式相同(?>\x0D\x0A?|[\x0A-\x0C\x85\x{2028}\x{2029}])。 ``` 保留一些文本 ``` \K 将 $0 的起始位置重置为当前文本位置。 换句话说,\K 左侧的所有内容都“保留”并且不构成正则表达式匹配的一部分。
相应更新。 例如,foo\Kbar匹配文本“foobar”将返回 $0 的匹配“bar”和
的“foo”。这可用于模拟可变宽度的回顾断言。 任何其他逃脱 任何其他转义序列匹配被转义的字符,例如 \@ 匹配文字“@”。 Perl 扩展模式 正则表达式语法的特定于 Perl 的扩展都以 (?. 開始。 命名子表达式 您可以使用以下方法创建命名子表达式:(?<NAME>expression) 然后可以通过名称NAME 引用它。 或者,您可以使用“NAME”分隔名称,如下所示:(?'NAME'expression) 这些命名子表达式可以使用\g{NAME} or \k<NAME> 在反向引用中引用,也可以在Perl格式字符串中通过名称引用 以进行搜索和替换操作,或在成员函数match_results中引用。 https://www.boost.org/doc/libs/1_76_0/libs/regex/doc/html/boost_regex/format/perl_format.html https://www.boost.org/doc/libs/1_76_0/libs/regex/doc/html/boost_regex/ref/match_results.html 评论 (?# ... )被视为评论,它的内容被忽略。 修饰符 (?imsx-imsx ... )更改模式中哪些 perl 修饰符有效,更改从第一次看到该块的点开始生效,并扩展到任何封闭的). '-' 之前的字母打开该 perl 修饰符,之后的字母将其关闭。 (?imsx-imsx:pattern)仅将指定的修饰符应用于模式。 ``` 非标记组 ``` (?:pattern)词法分组模式,而不生成额外的子表达式。 ``` 分支重置 ``` (?|pattern)在每个“|”的开头重置子表达式计数 模式内的替代方案。 此构造之后的子表达式计数是具有最多子表达式的分支的计数。当您想要在单个子表达式索引中捕获多个备选匹配项之一时,此构造很有用。 在以下示例中,每个子表达式的索引显示在表达式下方: # before ---------------branch-reset----------- after / ( a ) (?| x ( y ) z | (p (q) r) | (t) u (v) ) ( z ) /x # 1 2 2 3 2 3 4 ``` 展望 ``` (?=pattern)消耗零个字符,仅当模式匹配时。 (?!pattern)消耗零个字符,仅当模式不匹配时。 Lookahead 通常用于创建两个正则表达式的逻辑与,例如,如果密码必须包含一个小写字母、一个大写字母、一个标点符号,并且长度至少为 6 个字符,则表达式: (?=.*[[:lower:]])(?=.*[[:upper:]])(?=.*[[:punct:]]).{6,} 可用于验证密码。 ``` 向后看 ``` (?<=pattern)消耗零个字符,仅当模式可以与当前位置之前的字符匹配时(模式必须具有固定长度)。 (?<!pattern)消耗零个字符,仅当模式无法与当前位置之前的字符匹配时(模式必须具有固定长度)。 ``` 独立子表达式 ``` (?>pattern) pattern独立于周围的模式进行匹配,表达式永远不会回溯到pattern。独立的子表达式通常用于提高性能;只会考虑模式的最佳匹配,如果这不允许整个表达式匹配,则根本找不到匹配项。 ``` 递归表达式 ``` (?N) (?-N) (?+N) (?R) (?0) (?&NAME) (?R)和(?0)递归到整个模式的开始。 (?N)递归地执行子表达式N ,例如(?2)将递归到子表达式 2。 (?-N)和(?+N)是相对递归,例如(?-1)递归到要声明的最后一个子表达式,(?+1)递归到要声明的下一个子表达式。 (?&NAME)递归到命名子表达式NAME。 ``` 条件表达式 ``` (?(condition)yes-pattern|no-pattern)如果条件为真,则尝试匹配 yes-pattern,否则尝试匹配no-pattern。 (?(condition)yes-pattern) 如果条件为真,则尝试匹配yes-pattern,否则匹配 NULL 字符串。 条件可以是:前瞻断言、标记子表达式的索引(如果子表达式匹配则条件变为真)或递归索引(如果我们直接在内部执行则条件变为真指定的递归)。 以下是可能的谓词的摘要: (?(?=assert)yes-pattern|no-pattern) 如果前瞻断言匹配,则执行yes-pattern ,否则执行no-pattern。 (?(?!assert)yes-pattern|no-pattern) 如果前瞻断言不匹配则 执行yes-pattern ,否则执行no-pattern。 (?(N)yes-pattern|no-pattern) 如果匹配了子表达式N ,则 执行yes-pattern ,否则执行no-pattern。 (?(<name>)yes-pattern|no-pattern) 如果命名的子表达式名称 已匹配,则 执行yes-pattern ,否则执行no-pattern。 (?('name')yes-pattern|no-pattern) 如果命名的子表达式名称 已匹配,则 执行yes-pattern ,否则执行no-pattern。 (?(数字)pattern) 如果第几个子表达式匹配成功,那么继续匹配后面的;否则,后面的就当不存在。(\d)(A)?(?(2)B):8AB 8A 3BB 2 (?(数字)|pattern) 如果第几个子表达式匹配不成功,那么继续匹配后面的;否则,后面的就当不存在。(\d)(A)?(?(2)|B):8AB 8A 3BB 2 (?(R)yes-pattern|no-pattern) 如果我们在递归内部执行,则执行yes-pattern ,否则执行no-pattern。 (?(RN)yes-pattern|no-pattern) 如果我们在子表达式N的递归中执行,则 执行yes-pattern,否则执行 no-pattern。 (?(R&name)yes-pattern|no-pattern) 如果我们在递归中执行命名子表达式name,则 执行yes-pattern ,否则执行no-pattern。 (?(DEFINE)never-exectuted-pattern) 定义一个永远不会执行且不匹配任何字符的代码块:这通常用于定义一个或多个从模式中的其他地方引用的命名子表达式。 ``` 回溯控制动词 ``` 该库部分支持 Perl 的回溯控制动词,特别是 (*MARK) 不受支持。该库和 Perl 之间的行为也可能存在细节差异,尤其是因为 Perl 的行为记录不足,并且在实践中的行为方式通常有些随机。支持的动词是: (*PRUNE)除非回溯到,否则无效,在这种情况下,该点之前的所有回溯信息都将被丢弃。 (*SKIP)(*PRUNE) 除了假定在搜索的字符串中的当前点之前不可能发生匹配之外,其行为相同。这可用于通过跳过已确定无法形成匹配的文本块来优化搜索。 (*THEN)除非回溯到,否则无效,在这种情况下,将丢弃一组交替中的所有后续备选方案。 (*COMMIT)除非回溯到,否则无效,在这种情况下,所有后续匹配/搜索尝试都会被放弃。 (*FAIL)此时导致匹配无条件失败,可用于强制引擎回溯。 (*ACCEPT)导致模式被认为在当前点匹配。任何半开子表达式都在当前点关闭。 ``` 运算符优先级 ``` 运算符的优先顺序如下: 1归类相关的括号符号[==] [::] [..] 2转义字符\ 3字符集(括号表达式)[] 4分组() 5 * + ? {m,n} 6级联 7锚定^$ 8交替 | 构造ᅟᅟᅟ匹配的是什么 AtomA AtomBᅟᅟᅟ找到AtomA的最佳匹配项,该匹配项具有AtomB的后续匹配项。 Expression1 | Expression2ᅟᅟᅟ如果可以匹配Expression1则返回该匹配项,否则尝试匹配Expression2。 S{N}ᅟᅟᅟ匹配项S重复了 N 次。 S{N,M}ᅟᅟᅟ匹配 S 重复 N 到 M 次,并且尽可能多。 S{N,M}?ᅟᅟᅟ匹配 S 重复 N 到 M 次,并且次数尽可能少。 S?, S*, S+ᅟᅟᅟ分别与S{0,1}、S{0,UINT_MAX}、 S{1,UINT_MAX}相同。 S??, S*?, S+?ᅟᅟᅟ分别与S{0,1}?、S{0,UINT_MAX}?、 S{1,UINT_MAX}?相同。 (?>S)ᅟᅟᅟ匹配S的最佳匹配,并且仅此匹配。 (?=Sx), (?<=S)ᅟᅟᅟ仅匹配S的最佳匹配项(仅当S前後有捕获對象时才可见)。 (?!S), (?<!S)ᅟᅟᅟ仅考虑是否存在S的匹配项。 (?(condition)yes-pattern | no-pattern)ᅟᅟᅟ如果条件为真,则仅考虑是模式,否则仅考虑无模式。 ``` ## 字符类名称 https://www.boost.org/doc/libs/1_76_0/libs/regex/doc/html/boost_regex/syntax/character_classes/std_char_classes.html Character Classes that are Always Supported The following character class names are always supported by Boost.Regex: | | | | | | ------- | ------------------- | ----------------------------------------------------------------- | ------------------- | | Name | POSIX-standard name | Description | | | alnum | Yes | Any alpha-numeric character. | 任何字母数字字符。 | | alpha | Yes | Any alphabetic character. | 任何字母字符。 | | blank | Yes | Any whitespace character that is not a line separator. | 任何不是行分隔符的空白字符。 | | cntrl | Yes | Any control character. | 任何控制字符。 | | d | No | Any decimal digit | 任何十进制数字 | | digit | Yes | Any decimal digit. | 任何十进制数字。 | | graph | Yes | Any graphical character. | 任何图形字符。 | | l | No | Any lower case character. | 任何小写字符。 | | lower | Yes | Any lower case character. | 任何小写字符。 | | print | Yes | Any printable character. | 任何可打印的字符。 | | punct | Yes | Any punctuation character. | 任何标点符号。 | | s | No | Any whitespace character. | 任何空白字符。 | | space | Yes | Any whitespace character. | 任何空白字符。 | | unicode | No | Any extended character whose code point is above 255 in value. | 代码点值超过255的任何扩展字符。 | | u | No | Any upper case character. | 任何大写字符。 | | upper | Yes | Any upper case character. | 任何大写字符。 | | w | No | Any word character (alphanumeric characters plus the underscore). | 任何单词字符(字母数字字符加下划线)。 | | word | No | Any word character (alphanumeric characters plus the underscore). | 任何单词字符(字母数字字符加下划线)。 | | xdigit | Yes | Any hexadecimal digit character. | 任何十六进制数字字符。 | ## 字符集 | | | | | | | | ------- | --------------------------------------------- | ------------ | ------ | ----- | ----------- | | 漢字 | [\p{Han}⺚𠀀-𲎯㐀-鿿㇀-㇣] | **Onigmo正则** | | | | | | [〇⺀-⿕㐀-龻豈-頻𠀀-𲎯] | | | | | | | [〇⺀-⿕㐀-龻豈-頻𠀀-𲎯㇀-㇣] | | | | | | | [〇⺀-⿕㐀-鿿豈-﫿𠀀-𲎯㇀-㇣] | | | | | | | [〇㐀-龻] | | | | | | | [〇⺀-⿕㐀-鿿豈-﫿𠀀-𲎯㇀-㇣々〡-〩〸-〻] | | | | | | | | | | | | | 字符集 | **Onigmo正则** | | | 字数 | Unicode 编码 | | | | | | | | | 常用标点 | \p{InGeneral_punctuation} | “… | | | 2000-206F | | 部首补充 | \p{InCJK_Radicals_Supplement} | ⺀ | 115字① | 128 | 2E80-2EFF | | 康熙部首 | \p{InKangxi_Radicals} | ⼀-⿕ | 214字 | 224 | 2F00-2FDF | | 文字序列 | \p{InIdeographic_Description_Characters} | ⿰-⿻ | 12字 | 16 | 2FF0-2FFF | | 符号和标点 | \p{InCJK_Symbols_and_Punctuation} | 〇、。 | 〇1字 | 64 | 3000-303F | | 兼容字符 | \p{InCJK_Compatibility} | ㌀ | | 256 | 3300-33FF | | | | | | | | | 注音符号 | \p{InBopomofo} | ㄅ | 43字 | 48 | 3100-312F | | 汉文注释标志 | \p{InKanbun} | ㆑㆒㆓ | | 16 | 3190-319F | | 注音字母扩展 | \p{InBopomofo_Extended} | ㆠ | 32字 | 32 | 31A0-31BF | | 笔画 | \p{InCJK_Strokes} | ㇀-㇣ | 36字 | 48 | 31C0-31EF | | | | | | | | | | [\p{Han}𰀀-𲎯] | | | | | | 扩展区A | \p{InCJK_Unified_Ideographs_Extension_A} | 㐀-䶵 | 6592字 | 6592 | 3400-4DBF | | CJK | \p{InCJK_Unified_ideographs} | 一-龻 | 20902字 | 20992 | 4E00-9FFF | | | | | | | | | 私用区 | \p{InPrivate_Use_Area} | | | 6399 | E000-F8FF | | 兼容文字 | \p{InCJK_Compatibility_ideographs} | 豈-頻 | 472字② | 512 | F900-FAFF | | 竖排形式 | \p{InVertical_Forms} | ︙︘︒ | | 16 | FE10-FE1F | | 中日韩兼容形式 | \p{InCJK_Compatibility_Forms} | ︰-﹏ | | 32 | FE30-FE4F | | 小写变体形式 | \p{InSmall_Form_Variants} | ﹐﹑﹒ | | 32 | FE50-FE6F | | 半角及全角字符 | \p{InHalfwidth_and_fullwidth_forms} | !"#$% | | 240 | FF00-FFEF | | | | | | | | | | | | | | | | 扩展B区 | \p{InCJK_Unified_Ideographs_Extension_B} | 𠀀-𲎯 | 42720字 | 42720 | 20000-2A6DF | | 扩展C区 | \p{InCJK_Unified_Ideographs_Extension_C} | 𪜀 | 4154字 | 4160 | 2A700-2B73F | | 扩展D区 | \p{InCJK_Unified_Ideographs_Extension_D} | 𫝀 | 222字 | 224 | 2B740-2B81F | | 扩展E区 | \p{InCJK_Unified_Ideographs_Extension_E} | 𫠠 | 5762字 | 5776 | 2B820-2CEAF | | 扩展F区 | \p{InCJK_Unified_Ideographs_Extension_F} | 𬺰 | 7473字 | 7488 | 2CEB0-2EBEF | | 兼容增补 | \p{InCJK_Compatibility_Ideographs_Supplement} | 丽 | 542字 | 544 | 2F800-2FA1F | | 扩展G区 | G | 𰀀 | 4939字 | 4944 | 30000-3134F | | 扩展H区 | H | 𱍐-𲎯 | 192字 | 4192 | 31350-323AF | | | | | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | Onigmo Unicode 属性 | | | <所有汉字> | \P{Han} | | | [\x{3400}-\x{4DBF}\x{4E00}-\x{9FFF}\x{F900}-\x{FAFF}\x{20000}-\x{2A6DF}\x{2A700}-\x{2B73F}\x{2B740}-\x{2B81F}\x{2B820}-\x{2CEAF}\x{2F800}-\x{2FA1F}] | | Boost.Regex不支持五位數 | [\x{3400}-\x{4DBF}\x{4E00}-\x{9FFF}\x{F900}-\x{FAFF}\x{20000}-\x{2A6DF}\x{2A700}-\x{2B73F}\x{2B740}-\x{2B81F}\x{2B820}-\x{2CEAF}\x{2F800}-\x{2FA1F}] | | | 䶶 | | | [一-𲎯] | | | | | 除汉字外的所有字符: | \p{^Han} | | | | | <所有拉丁字母> | \p{Latin} | | <所有天城> | \p{Devanagari} | | <所有藏文> | \p{Tibetan} | | <所有韩文> | \p{Hangul} | | | | | 平假名: | [\x{3041}-\x{309e}] | | 全角片假名: | [\x{309b}-\x{309c}\x{30a1}-\x{30fe}] | | 半角假名: | [\x{ff61}-\x{ff9f}] | | [ㇰヿㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺゟㇻㇼㇽㇾㇿ]」 | | | CJK 表意文字: | [\x{3400}-\x{9fff}\x{f900}-\x{fa2d}] | | CJK 表意文字标记: | [\x{3000}-\x{3037}] | | 韩文: | [\x{1100}-\x{11f9}\x{3131}-\x{318e}\x{ac00}-\x{d7a3}] |