java - 正则表达式 - 匹配不在两个字符串之间的字符
问题描述
我读过很多关于寻找正则表达式来匹配两个字符串之间的字符的问题,但我的问题是相反的。我正在尝试创建一个匹配两个字符串之间的字符的表达式。
考虑以下字符串。
This is short & [tag]fun & interesting[/tag].
我想用符号 @ 替换不在标记元素内的任何 &字符。结果应如下所示。
This is short @ [tag]fun & interesting[/tag].
我尝试了以下正则表达式,但不幸的是,它与标记元素内的 & 符号匹配。
/(?<!\[tag\])&(?!\[\/tag\])/g
我知道它与该&符号匹配,因为它被字符串两侧的字符包围。但是我不能添加随机数量的字符来检查,因为后视和前瞻必须是固定长度。
是否有一个正则表达式可以在这里完成我想要的?
解决方案
即使使用嵌套标签,这也可以完成工作:
- 寻找:
\[(\w+)\].+?\[/\1\](*SKIP)(*FAIL)|&
- 代替:
@
这个怎么运作:
\[(\w+)\].+?\[/\1\]
正在尝试将开始和结束标签与里面的一些数据相匹配(*SKIP)(*FAIL)
如果找到标签,则丢弃它|
别的&
匹配一个&符号。此时,我们确定它不在标签内。
不幸的是,这不适用于 Java,但这个要求是在我回答后才添加的。
推荐阅读
- ansible - Ansible 转义字符串 \
- python-3.x - OSError: [Errno 8] 执行格式错误 - wkhtmltopdf & pydf
- java - Log4j 警告:即使存在也找不到附加程序
- uwp - UWP 项目在 GitHub Actions 上失败,因为证书无效 APPX0107
- java - org.gradle.api.tasks.TaskExecutionException:任务“:compileKotlin”执行失败
- dialogflow-es - 在没有用户输入或交互的情况下连续拥有多个 GoogleResponse
- ssh - SSH 控制台在按回车键时打印 ^H
- android - 防止配置更改后通知 onFocus 侦听器?
- php - 该站点无法访问 CodeIgniter 框架
- python - Pygame 窗口不加载图像