当有空格字符时,尝试在vim中使用正则表达式搜索字符串失败。
我希望vim找到两个
<title><![CDATA[formTempoFisio]]></title>
作为
<question><![CDATA[<p>
<span style="font-family: Arial, sans-serif; font-size: 9pt;">{(strtotime(datInicioFisioAt)-strtotime(datLesao))/60/60/24}</span></p>
]]></question>
请注意,在<p>
后面和<span style="font-family: Arial, sans-serif; font-size: 9pt;">{(strtotime(datInicioFisioAt)-strtotime(datLesao))/60/60/24}</span></p>
后面有一个新行。
我在集合中使用特殊字符。我的搜索正则表达式是:
/<!\[CDATA\[[[:alnum:][:space:][:return:][:tab:]]\+\]\]>
但只有在没有换行符时才会找到vim。
我做错了什么?
答案 0 :(得分:1)
有几个问题。
[:space:]
匹配所有空白字符,包括\r
和\t
,因此[:return:]
和[:tab:]
是多余的。[:alnum:]
匹配ASCII字母和数字。它不匹配,例如<
或=
或"
,因此<span style="
无法匹配。\n
或在\_
前添加。您可以使用以下正则表达式:
/<!\[CDATA\[\_.\{-}\]\]>
匹配<![CDATA[
,后跟包括换行符(\_.
)在内的任何字符重复0次或更多次,但尽可能少(\{-}
,&#34;非贪婪&# 34;),然后是]]>
。
如果要明确列出第二个示例中出现的字符,则会变得更复杂:
/<!\[CDATA\[\_[[:alnum:][:space:]<>=":,;{}()\/-]\{-}\]\]>
它仍然不匹配,例如'
或+
,可以很容易地出现在代码中,因此限制允许的字符集似乎没什么意义。