簡體   English   中英

正則表達式后觀問題

[英]Regular expression lookbehind problem

我用

(?<!value=\")##(.*)##

匹配像## MyString ##這樣的字符串,它不是以下形式:

<input type="text" value="##MyString##">

這適用於上述形式,但不適用於:(它仍匹配,不匹配)

<input type="text" value="Here is my ##MyString## coming..">

我試過了:

(?<!value=\").*##(.*)##

沒有運氣。 任何建議都將深表感謝。

編輯:我正在使用PHP preg_match()函數

這不是完美的(這就是HTML解析器的用途),但它適用於絕大多數HTML文件:

(^|>)[^<>]*##[^#]*##[^<>]*(<|$)

這個想法很簡單。 你正在尋找一個不在標簽之外的字符串。 要在標簽之外,與其最接近的前角形支架必須關閉(或者根本沒有支架),並且最接近的一個必須打開(或不打開)。 這假定在屬性值中不使用有角度的括號。

如果您確實關心屬性名稱是“value”,那么您可以匹配:

value\s*=\s*"([^\"]|\\\")*##[^#]*##([^\"]|\\\")*\"

...然后簡單地否定匹配( !preg_match(...) )。

@OP,你可以在沒有正則表達式的情況下完成。

$text = '<input type="text" value="   ##MyString##">';
$text = str_replace(" ","",$text);
if (strpos($text,'value="##' ) !==FALSE ){
    $s = explode('value="##',$text);
    $t = explode("##",$s[1]);
    print "$t[0]\n";
}

這里至少是一個起點,它適用於給定的例子。

(?<!<[^>]*value="[^>"]*)##(.*)##

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM