原始字符串:
These * should * not \*be\* selected. This* neither! *should be. This *neither should\* be* *this should* and*This*
期待:
These * should * not *be* selected. This* neither! *should be. This *neither should* be* <em>this should</em> ~~and<em>This</em>~~
旧的正则表达式:
"(^|[\\W_])(?:(?!\\1)|(?=^))(\\*|_)(?=\\S)((?:(?!\\2).)*?\\S)\\2(?!\\2)(?=[\\W_]|$)"
旧的不足以应对这种情况
有人可以帮忙吗?快速正则表达式
最佳答案
在使用正则表达式解析 Markdown 时,您应该小心使用正则表达式方法,因为您的数据可能具有转义序列。这意味着,你不能只使用环视来匹配前面没有反斜杠的东西。您可以尝试使用正则表达式来将 Markdown 之前的转义序列匹配到一组中,并将 Markdown 部分匹配到另一组中。
"(?u)(\\\\.)|(\\*\\b(?:(?!\\\\[*]).)*?\\b\\*)"
参见 this regex demo .在代码中,您需要根据您的规范以不同方式处理这两个组。
图案细节:
(?u)
- 使模式中的单词边界识别 Unicode(\\\\.)
- 第 1 组 - 转义序列|
- 或者(\\*\\b(?:(?!\\\\[*]).)*?\\b\\*)
- 第 2 组匹配\\*\\b
-*
后跟单词 char(?:(?!\\\\[*]).)*?
- 任何不是\*
序列起始字符的字符,尽可能少\\b\\*
- 以字符字符开头的*
更好的选择是自定义解析代码。
关于regex - markdown emph正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39287104/