例如我有
<Home/>
wall
none
</Home>
我在这里要做的是找出一种在其中添加“墙”的方法
<Home />
</Home>
然后确保它在文件中,如果没有,我需要添加它。
确保“墙”存在的最佳方法是什么?
我尝试使用的是正则表达式:
^(<Home />.*\n)([^.]+</Home>.*)$
,然后进行替换
$1 wall\n$2
如何将“ wall”添加到文件的该部分中,并确保它在那里就意味着如果该部分中已经没有任何变化?
答案 0 :(得分:2)
您可以使用
class String
Error = Class.new(StandardError)
ParseError = Class.new(Error)
end
并替换为^(<Home\s*/>)((?:\R(?!(?:wall|</Home>)$).*)*\R</Home>)
。
请参见regex demo
详细信息
$1\nwall$2
-一行的开头^
-第1组:(<Home\s*/>)
,0+空格,<Home
/>
-第2组:
((?:\R(?!(?:wall|</Home>)$).*)*\R</Home>)
-0次以上连续出现
(?:\R(?!(?:wall|</Home>)$).*)*
-一个换行符(\R(?!(?:wall|</Home>)$)
),后面没有\R
或wall
作为整个行文本(借助负向前瞻{{1 }})</Home>
-除换行符外的任意0+个字符到行尾(尽可能多)(?!(?:wall|</Home>)$)
-换行符.*
-一个\R
子字符串。 </Home>
和</Home>
是替换后向引用,它们引用第1组和第2组中捕获的值。