【发布时间】:2011-06-23 08:44:51
【问题描述】:
我有以下 XML 标记
<list message="2 < 3">
我想将文本中的&lt;替换为&lt;
如果&lt; 没有出现在行首,则需要一个正则表达式来匹配它。
【问题讨论】:
标签: regex
我有以下 XML 标记
<list message="2 < 3">
我想将文本中的&lt;替换为&lt;
如果&lt; 没有出现在行首,则需要一个正则表达式来匹配它。
【问题讨论】:
标签: regex
【讨论】:
[^<]+ = 一个或多个不是的字符
< =
替换:
([^<]+)<
与:
$1<
【讨论】:
< 开头时才匹配(它可以),然后匹配所有内容,直到遇到第一个 <。你有一个可运行的例子吗? JavaScript?
< 和< 之间至少有一个字符。我没有在正则表达式的开头声明^,所以它不排除以<开头的行
< 开头的行,并且确实回答了这个问题。上面的其他 cmets 不正确。我已经删除了我上面的评论。
点“。”表示“任何值”
.<
无论如何,我想你也不想要空格。如果是的话,那么
\S\s*<
【讨论】:
这会在第一个实例之后给你“
[^<]<
【讨论】:
试试这个:
(?<="[^"]*)<(?=[^"]*")
【讨论】:
@duncan 的方法在你只想替换的情况下可以正常工作,但它与< 不匹配。
如果您使用 javascript,所有后向操作都将不起作用。因为javascript不支持lookbehind,除非您在nodejs中打开--harmony标志或在chrome中打开实验性javascript功能。
但是前瞻将在这里工作,即:
/(?!^)</
将匹配不在行首的<。
替换将是:
'<list message="2 < 3">'.replace(/(?!^)</, '<')
【讨论】: