【发布时间】:2019-12-28 03:28:12
【问题描述】:
在使用正则表达式搜索子字符串时,我需要帮助以忽略模式。 例如,在下面的字符串中
Hello *testing [*_*] message* text 或
Hello *testing [_*_*] message* text * additional* message 或
Hello testing [*_*_] message* text * additional* message* 或
Hello testing [_*_*_] message* text * additional* message*
我需要找出所有 * 以替换为 html 粗体标记,方括号“[]”内的那些除外。
但是当我运行这个正则表达式[*]((?s).*?)[*] 时,它还在[] 中包含*,并替换它们。搜索时如何忽略 [* 和 *] 组合。
任何帮助将不胜感激。
编辑:
基本上,如果给定字符(例如*)在方括号[ 和] 内,我想忽略匹配。
【问题讨论】:
-
你能使用否定的环视吗?如果是这样,类似
'(?<!\[)\*(?!])'的内容将匹配*,除非它前面或后面有[或] -
状态机可能会给出更好的结果
-
@Cristik 在实践中它可能更容易实现和调试。但是请注意,有限状态机等价于正则表达式。
-
@Sulthan 我认为情况正好相反:正则表达式解析器使用状态机。另外,不确定为这种情况编写正确的正则表达式有多容易,这就是我推荐自定义解析器的原因\
-
这真的是为了 swift 还是一般的正则表达式问题?