9

私が使う

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

次の形式ではない##MyString##のような文字列に一致します 。

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

これは上記のフォームでは機能しますが、これでは機能しません: (それでも一致しますが、一致しないはずです)

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

私は試した:

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

運がない。どんな提案でも大歓迎です。

編集: PHP preg_match() 関数を使用しています

4

3 に答える 3

4

これは完全ではありません (HTML パーサーはそのためのものです) が、ほとんどの HTML ファイルで機能します:

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

考え方は単純です。タグの外側にある文字列を探しています。タグの外側にあるためには、それに最も近い前の角括弧が閉じている (または角括弧がまったくない) 必要があり、最も近い次の角括弧が開いている (またはなし) 必要があります。これは、山括弧が属性値で使用されていないことを前提としています。

属性名が「値」であることを実際に気にする場合は、次のように一致させることができます。

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

...そして、単純に一致を否定します ( !preg_match(...))。

于 2010-02-06T05:14:14.450 に答える
1

@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";
}
于 2010-02-06T01:02:58.477 に答える
0

これは少なくとも出発点であり、与えられた例では機能します。

(?<!<[^>]*value="[^>"]*)##(.*)##
于 2010-02-06T00:07:19.963 に答える