我已经尝试了2个小时,但我似乎无法正确掌握正则表达式。我想从字符串中替换所有html注释,但前提是字符串不是由<br>
标记立即取代。
我已经很好地完成了以下工作,从字符串中删除所有html注释:
preg_replace('/<!--.*?-->/s', '', $str);
我正在尝试添加,以便在<br>
标记立即成功后不会替换注释。我在想这样的事情(显然是错的),但无法绕过它:
preg_replace('/<!--.*?-->(?!<br>)/s', '', $str);
任何指导意见。
答案 0 :(得分:2)
延迟点模式将匹配尽可能少的字符,直到与后续模式匹配的第一个子字符串,在您的情况下,这意味着一旦找到Library Project
,匹配的字符串{{ 1}}将是匹配private func requestContactsAccess() {
//store = CNContactStore()
store.requestAccessForEntityType(.Contacts) {granted, error in
if granted {
dispatch_async(dispatch_get_main_queue()) {
self.accessGrantedForContacts()
return
}
}
}
}
未跟随<!--
的下一个匹配,即使它是下一个评论的结束评论分隔符。
您需要做的是确保.*?
与-->
不匹配。使用<br>
tempered greedy token或其展开版本:
.*?
请参阅regex demo
-->
模式匹配(?:(?!-->).)*
('~<!--[^-]*(?:-(?!->)[^-]*)*-->(?!<br>)~s'
)以外的任何0 +字符,然后[^-]*(?:-(?!->)[^-]*)*
的0 +序列不跟-
一致(请参阅[^-]*
),然后是-
以外的0 +字符。
->
淬火贪婪令牌匹配任何未启动-(?!->)
序列(-
)的字符((?:(?!-->).)*
),零次或多次({{1} })。