2017-06-24 16 views
0

以下正則表達式:帶標籤的正則表達式工作,但不具有特定的ID?

(?!<script[^>]*>)[(.*?)](?![^<]*<\/script>) 

目標每隔[TEXT]和[INPUT]有在輸入字符串中,除了任何[] script標籤內。

我現在想要改變這種情況,只有id="special"的特定腳本有例外。

所以<script id="special">[INPUT]</script>不應該是針對性的,而另一個腳本標籤沒有id特殊的,如<script>[INPUT]</script>應該與字符串的其餘部分一起。

我試着在[^>]*>之前加id="special"到上面的正則表達式,但是不起作用。

+0

爲什麼-1任何人?我想改善,但我必須知道爲什麼? – Karem

+0

@ chris85感謝您的評論。格式是一致的,但它應該與具有id =「special」的所有腳本標籤「跳過」匹配。嘗試你的正則表達式,雖然它不匹配與[輸入]只有一個新的行(不包裹在 Karem

+0

因此應該是一種異常的正則表達式匹配。這個腳本不應該匹配,我開始認爲我解釋很糟糕,希望你明白 – Karem

回答

0

您可以通過使用PCRE動詞skipfail跳過與ID的script元素中的一切。

<script id="special">.*?<\/script>(*SKIP)(*FAIL)|\[[^\]]+?\] 

演示:https://regex101.com/r/PSMV15/5/

你可以閱讀更多關於此這裏,http://www.rexegg.com/backtracking-control-verbs.html#skipfail

如果字符串是HTML,應該使用解析器,因爲元素和屬性中可能有各種各樣的變體。

例如:

<script id="special"> 
<script src="page" id="special"> 
<script src="page" id="special" class="why?"> 
<script id='special'> 
<script id=special> 
<script id=special src=page> 

,甚至沒有進入分層要素髮行。這裏有一個線程,爲什麼正則表達式和HTML不應該在一起。 RegEx match open tags except XHTML self-contained tags

+0

謝謝!大!最後,$ 1是空的,我該如何解決這個問題?我嘗試修改正則表達式:

0

您可能會對此很複雜。

如果你不想有\ S爲空白的任何屬性,你可以使用一個<script>匹配元素:

<\s*script\s*>\[(.*?)\]</\s*script\s*>

如果只讀屬性,你需要忽略的「身份證」你能使用 負向前查找/回顧後:

<script(?!.*\sid=).*>\[(.*?)\]</script>

,將匹配<script不是由FOLLOWED之前的>字符。 如需更多幫助,請訪問該Link

+0

感謝您的貢獻。它不符合您想要實現的第二種解決方案:http://regexr.com/3g7qk – Karem