如何编写正则匹配以_@_开头、__d__结尾的语句?d为1-2位数字
正则表达式匹配问题分析
需求说明
需要编写正则表达式,匹配以_@_开头、以__d__(d为1-2位数字)结尾的子串。
示例与期望
输入文本:
getting a regex _@_enter text text . tex, text here__2___2_ te xt text .期望提取结果:
_@_enter text text . tex, text here__2__
你尝试的正则
^(_@_)?.* \_\_\d{1,2}\_$/gm
存在的问题
- 锚点逻辑错误:
^和$是行首/行尾锚定,你的目标是行内的一段子串而非整行内容,这会导致正则只能匹配整行完全符合开头结尾的文本,无法定位到行中间的目标内容。 - 开头匹配不符合要求:
(_@_)?中的?表示_@_是可选的,但需求是必须以_@_开头,这个?会让正则匹配不含_@_的内容,违背需求。 - 贪婪匹配导致结果偏差:
.*是贪婪匹配,会尽可能匹配最长内容,容易跳过目标结尾,匹配到更靠后的符合数字下划线规则的部分。 - 结尾格式匹配错误:需求的结尾是
__d__(两个下划线+数字+两个下划线),但你写的是\_\_\d{1,2}\_,少了一个下划线;同时$锚定行尾,和目标结尾的实际位置不符。 - 无效语法与多余模式:正则中的换行是无效的,需合并为单行;
/gm中的m(多行模式)不需要,因为你不需要匹配多行的行首行尾。
修正后的正则
_@_.*?__\d{1,2}__
_@_:强制匹配开头标识.*?:非贪婪匹配任意字符,确保匹配到第一个符合结尾格式的位置__\d{1,2}__:精确匹配结尾格式(两个下划线+1-2位数字+两个下划线)
内容的提问来源于stack exchange,提问作者Kyv
相关产品推荐
相关产品推荐

