我想用<br>
标签将所有内容包装在字符串中,除了<div>
标签之外。
因此,我的输入将类似于:
Hello this <br> is a test<br><br>
,我的输出应该是
<span>Hello this </span><br><span> is a test</span><br><br>
我有用于匹配
标记的正则表达式,但是在尝试将其反转时会出现问题。
[^(<br ?/?>)]
当前与不是<,b,r或>的每个字符匹配。这只是一个小问题,因为我不想匹配字符而不是
的单词。
答案 0 :(得分:1)
我不知道Qt,但是它似乎使用了PCRE正则表达式。 (请参阅QRegExp,QRegularExpression)
PCRE具有向前和向后的操作,可以使我们形成解决方案:
((?<=^|<br>)(?:(?!<br>).)+)
在以下位置进行测试:https://regex101.com/r/fLVGk7/2/
这说:
( ... )
-创建捕获组-可能不需要(?<=^|<br>)
-匹配必须以字符串开头或<br>
(?: ... )
-分组(不创建捕获组)(?!<br>).
-不是<br>
开头的任何字符注意:
(?:(?!<br>).)+
)匹配每个不包含<br>
的子字符串;例如,添加2会阻止匹配br><span...
<br>
可以用更复杂的东西代替限制:
(?<=...)
)<br\s*\?>
),只要它具有唯一的固定长度后缀(例如>
),就可以继续使用;在这种情况下,正则表达式变为:((?<=^|SUFFIX)(?:(?!NONMATCH).)+)
(?<=^|>)(?:(?!<br\s*\/?>).)+)