网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月03日漏签0天
正则表达式吧 关注:3,150贴子:8,844
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 17回复贴,共1页
<<返回正则表达式吧
>0< 加载中...

我太想知道这个东西怎么写了,还有就是我的式子到底错在哪里了?

  • 只看楼主
  • 收藏

  • 回复
  • 绘夜落雨
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
--------------------
本书的基调依旧是悬疑为主!
天地出,万物生,它不是一般的玄妙、深奥,而是玄妙又玄妙、深远又深远,是宇宙天地万物之奥妙的总门(从“有名”的奥妙到达无形的奥妙,“道”是洞悉一切奥妙变化的门径。
就这样,祝大家看得开心。
--------------------
就上面那一段内容,包括横线部分和空行。
下面是我自己写的式子。
^-{20}\n[\s\S]+?^-{20}
我感觉就没问题啊,但为什么在emeditor中不生效啊!有大佬知道为什么吗?正确的应该怎么写?


  • 元漫之神
  • 人海孤鸿
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
问DS吧 现在我写正则直接用AI来写 把需求示范,希望结果写清楚


2025-12-03 04:24:16
广告
不感兴趣
开通SVIP免广告
  • 元漫之神
  • 人海孤鸿
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你好!我来详细解释一下这个问题。
为什么网页可以用而EmEditor不能用?
主要原因:EmEditor默认使用EmEditor自己的正则引擎,而不是PCRE/JavaScript引擎。
网页中的正则引擎(如JavaScript)支持更宽松的语法,而EmEditor的正则引擎有更严格的语法要求。
具体问题分析
你的正则表达式:
"^-{20}\n[\s\S]+?^-{20}"
在EmEditor中不生效的原因:
1.
"."默认不匹配换行符:EmEditor中
"."默认不匹配换行符,需要特殊处理
2. 字符类语法:
"[\s\S]"在EmEditor中可能不被正确识别
3. 换行符处理:EmEditor对
"\n"的处理可能与网页环境不同
EmEditor可用的正则表达式
方案1:使用EmEditor专用语法
^-{20}\n(.*\n)*?^-{20}
方案2:更精确的匹配
^-{20}\r?\n.*?^-{20}
方案3:匹配包含空行的内容
^-{20}\r?\n(?:.|\r?\n)*?^-{20}
实际测试可用的版本
对于你的具体内容,建议使用:
^-{20}\r?\n.*\r?\n.*\r?\n.*\r?\n^-{20}
或者更通用的:
^-{20}(?:\r?\n(?!-{20}).*)*\r?\n-{20}
在EmEditor中的使用步骤
1. 按
"Ctrl+F" 打开查找对话框
2. 勾选"正则表达式"选项
3. 在"查找"框中输入上述任一正则表达式
4. 点击"查找下一个"
推荐的最佳实践
^-{20}\r?\n[\s\S]{0,2000}?-{20}
这个版本在大多数情况下都能正常工作,其中
"{0,2000}?"限制了匹配长度,避免性能问题。
建议先用方案1进行测试,它最简单且最可能在你的EmEditor版本中正常工作。


  • 元漫之神
  • 人海孤鸿
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
### 正则表达式 1:`^-{20}\r?\n.*\r?\n-{20}$`
#### 流程解析:
1. **`^`**
- 匹配行的开头。
2. **`-{20}`**
- 匹配连续的 20 个 `-` 字符。
3. **`\r?\n`**
- 匹配换行符,兼容 `\r\n`(Windows)和 `\n`(Unix/Linux)。
4. **`.*`**
- 匹配任意字符(不包括换行符),直到行尾。
5. **`\r?\n`**
- 再次匹配换行符。
6. **`-{20}`**
- 匹配连续的 20 个 `-` 字符。
7. **`$`**
- 匹配行的结尾。
#### 特点:
- 只能匹配单行内容(因为 `.*` 不包含换行符)。
- 适用于中间内容只有一行的场景。
---
### 正则表达式 2:`^-{20}\r?\n[\s\S]*?\r?\n-{20}$`
#### 流程解析:
1. **`^`**
- 匹配行的开头。
2. **`-{20}`**
- 匹配连续的 20 个 `-` 字符。
3. **`\r?\n`**
- 匹配换行符,兼容 `\r\n` 和 `\n`。
4. **`[\s\S]*?`**
- 匹配任意内容(包括换行符),非贪婪模式,尽可能少地匹配字符。
5. **`\r?\n`**
- 再次匹配换行符。
6. **`-{20}`**
- 匹配连续的 20 个 `-` 字符。
7. **`$`**
- 匹配行的结尾。
#### 特点:
- 能匹配多行内容(因为 `[\s\S]*?` 包括换行符)。
- 非贪婪匹配确保只匹配到最近的结束分隔符。
- 更通用,适合中间内容跨越多行的场景。
---
### 总结对比:
1. **第一种正则**:仅支持单行内容,`.*` 不含换行符。
2. **第二种正则**:支持多行内容,`[\s\S]*?` 含换行符且非贪婪。


  • 元漫之神
  • 人海孤鸿
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
根据你提供的信息和 EmEditor 的官方文档,你的正则表达式 `^-{20}\n[\s\S]+?^-{20}` 在 EmEditor 中无法正常工作的原因可能是以下几个方面。我们将结合官方文档的正则语法(基于 Perl 正则表达式)逐步分析,并翻译成中文解释。
---
### **1. 换行符问题**
#### 原因:
EmEditor 支持多种换行符格式(`CR`、`LF` 或 `CR+LF`),而 `\n` 只匹配 Unix 风格的换行符(`LF`)。如果目标文件使用的是 Windows 风格的换行符(`CR+LF`,即 `\r\n`),你的正则表达式将无法正确匹配。
#### 官方文档相关说明(翻译):
> **新行标记**
> 新行可以是仅 `CR`、仅 `LF` 或 `CR+LF` 的组合。在正则表达式中,需要根据实际文件的换行符格式指定正确的匹配规则。
#### 解决方案:
将 `\n` 替换为兼容的换行符表达式 `\r?\n`,以支持不同操作系统的换行符格式。
---
### **2. 多行模式未启用**
#### 原因:
默认情况下,EmEditor 的正则表达式中的 `^` 和 `$` 匹配整个文件的开头和结尾,而不是每一行的开头和结尾。如果目标字符串跨越多行,正则表达式可能无法正确匹配。
#### 官方文档相关说明(翻译):
> **多行匹配**
> 如果需要匹配每一行的开头或结尾,必须启用“多行模式”。在 EmEditor 中,可以通过勾选“使用正则表达式”选项来启用多行模式。
#### 解决方案:
确保在 EmEditor 的查找对话框中勾选了“使用正则表达式”选项,并确认是否启用了多行模式。
---
### **3. 非贪婪匹配的支持问题**
#### 原因:
虽然 EmEditor 的正则表达式基于 Perl 语法,但某些高级功能(如非贪婪匹配 `+?`)可能在特定场景下表现不一致。如果中间内容有多段符合条件的内容,非贪婪匹配可能会导致匹配失败。
#### 官方文档相关说明(翻译):
> **量词修饰符**
> 默认情况下,量词是贪婪的,会尽可能多地匹配字符。如果需要非贪婪匹配,可以在量词后添加 `?`,例如 `+?` 或 `*?`。然而,在某些复杂场景下,非贪婪匹配可能会导致意外行为。
#### 解决方案:
尝试改用明确的匹配逻辑,避免依赖非贪婪匹配。例如,使用 `[\s\S]*` 而不是 `[\s\S]+?`。
---
### **4. 特殊字符的转义问题**
#### 原因:
在 EmEditor 中,某些特殊字符(如 `-` 或 `^`)需要正确转义,否则可能导致匹配失败。虽然 `-` 在方括号外通常不需要转义,但在某些上下文中可能需要额外注意。
#### 官方文档相关说明(翻译):
> **特殊字符与转义**
> 特殊字符(如 `.`、`*`、`?`、`+`、`(`、`)` 等)需要通过反斜杠 `\` 转义才能作为普通字符匹配。此外,某些字符(如 `-` 和 `^`)在特定上下文中也需要转义。
#### 解决方案:
确保所有特殊字符都正确转义。例如,`-{20}` 应该改为 `\-{20}`。
---
### **改进后的正则表达式**
结合上述分析,改进后的正则表达式如下:
```regex
^\-{20}\r?\n[\s\S]*?\r?\n\-{20}$
```
#### 解析改进点:
1. **`\-{20}`**:对 `-` 进行转义,确保其作为普通字符匹配。
2. **`\r?\n`**:兼容不同操作系统的换行符格式。
3. **`[\s\S]*?`**:匹配任意内容(包括换行符),非贪婪模式。
4. **`$`**:匹配行尾,确保结束分隔符正确。
---
### **总结:为何写错?**
1. **换行符问题**:`\n` 不兼容 `CR+LF` 格式。
2. **多行模式未启用**:`^` 和 `$` 默认匹配整个文件,而非每行。
3. **非贪婪匹配问题**:`[\s\S]+?` 在复杂场景下可能导致匹配失败。
4. **特殊字符未转义**:`-` 在某些上下文中需要转义。
通过上述改进,正则表达式应能在 EmEditor 中正常工作。如果仍有问题,请提供更多上下文信息,我们可以进一步调试!


  • 元漫之神
  • 人海孤鸿
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
根据你提供的信息和 EmEditor 的官方文档,你的原始正则表达式 `^-{20}\n[\s\S]+?^-{20}` 在 EmEditor 中无法正常工作的原因主要是以下几个问题:
1. 换行符不兼容:`\n` 只匹配 Unix 风格的换行符(LF),而 EmEditor 默认支持多种换行符格式(如 `\r\n` 和 `\n`)。
2. 多行模式未启用:`^` 和 `$` 默认匹配整个文件的开头和结尾,而不是每一行的开头和结尾。
3. 非贪婪匹配可能失效:`[\s\S]+?` 在某些复杂场景下可能导致匹配失败。
---
能匹配的正确正则表达式
以下是所有能在 EmEditor 中正确匹配目标文本的正则表达式及其解释:
1. 基本改进版
regex
^\-{20}\r?\n[\s\S]*?\r?\n\-{20}$
- 解释:
- `\-{20}`:匹配连续的 20 个 `-` 字符。
- `\r?\n`:兼容 Windows (`\r\n`) 和 Unix (`\n`) 换行符。
- `[\s\S]*?`:非贪婪匹配任意内容(包括换行符)。
- `\r?\n`:再次匹配换行符。
- `\-{20}$`:匹配以 20 个 `-` 结尾的一行。
2. 单行内容匹配版
regex
^\-{20}\r?\n.*\r?\n\-{20}$
- 解释:
- `.*`:匹配任意字符(不包括换行符),适用于中间内容只有一行的场景。
3. 明确多行匹配版
regex
^\-{20}\r?\n(?:.*\r?\n)*\-{20}$
- 解释:
- `(?:.*\r?\n)*`:明确匹配多行内容,每行以换行符结束。
4. 简化版(假设换行符为 `\n`)
regex
^\-{20}\n[\s\S]*?\n\-{20}$
- 解释:
- 如果目标文件使用的是 Unix 换行符(`\n`),可以使用此版本。
5. 更通用的多行匹配版
regex
^\-{20}\r?\n[\w\W]*?\r?\n\-{20}$
- 解释:
- `[\w\W]`:等价于 `[\s\S]`,匹配任意字符(包括换行符)。
6. 强制多行模式版
regex
(?m)^\-{20}\r?\n[\s\S]*?\r?\n\-{20}$
- 解释:
- `(?m)`:启用多行模式,使 `^` 和 `$` 匹配每一行的开头和结尾。
---
原始正则为什么无法匹配?
原始正则 `^-{20}\n[\s\S]+?^-{20}` 存在以下问题:
1. 换行符问题:`\n` 不兼容 Windows 换行符 `\r\n`。
2. 多行模式未启用:默认情况下,`^` 和 `$` 匹配整个文件的开头和结尾,而非每一行。
3. 非贪婪匹配限制:`[\s\S]+?` 在某些复杂场景下可能失效。
因此,原始正则无法直接修改为与上述正确的正则表达式完全一致。必须调整换行符和多行模式,才能实现匹配。
---
总结
如果希望在 EmEditor 中正确匹配目标文本,推荐使用以下正则表达式之一:
1. 推荐版:`^\-{20}\r?\n[\s\S]*?\r?\n\-{20}$`
2. 单行版:`^\-{20}\r?\n.*\r?\n\-{20}$`
3. 多行版:`^\-{20}\r?\n(?:.*\r?\n)*\-{20}$`
这些正则表达式均能解决原始正则的问题,并适应 EmEditor 的语法要求。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 17回复贴,共1页
<<返回正则表达式吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示