-1

私は次の文字列を持っています

.proxy.com  TRUE    /   FALSE   0   COOKIE%253BCartID%253B%252F%253Bwww.proxy.com   1914104745%253B

および次の正規表現

[a-zA-Z0-9\%]{14,15}

1914104745%253B のみを一致させたいのですが、COOKIE%253BID を取得しています。このような否定的なアサーションを実行しようとしました

[a-zA-Z0-9\%]{14,15}[?!COOKIE]

しかし、それはうまくいきません

誰でもこの正規表現を手伝ってもらえますか?

4

4 に答える 4

2

で文字列の最後に固定しないのはなぜですか[a-zA-Z0-9%]{14,15}$

$str=".proxy.com  TRUE    /   FALSE   0   COOKIE%253BCartID%253B%252F%253Bwww.proxy.com   1914104745%253B";
preg_match('/[a-zA-Z0-9%]{14,15}$/',$str,$match); 
echo $match[0];

>>> 1914104745%253B

一致させたい文字列の部分が厳密にフォーマットされている場合は、次のようなものを使用できます。一致が常に文字列の最後にあるとは限らない場合は、\d{10}%\d{3}[A-Z]$ドロップできます。どちらの方法でも、例でのみ一致します。 $1914104745%253B

注:%エスケープは必要ありません。

于 2013-01-03T08:43:07.877 に答える
1

これを試して

(?<=\s)[\w%]{14,15}(?:(?=\s)|$)

デモ

于 2013-01-03T08:48:10.093 に答える
0

先読みでは、角かっこではなく丸かっこを使用します。しかし、ここでは先を見通すだけでは役に立たないと思います。

(?!COOKIE)[a-zA-Z0-9\%]{14,15}

一致を妨げますCOOKIE%253BCartが、代わりに単に一致OOKIE%253BCartIします。末尾を使用して行末に一致を固定することは、$おそらく最も簡単な方法です。

于 2013-01-03T08:52:51.623 に答える
0

行の空白以外の文字の最後の文字列を取得しようとしているだけですか? 次に、これを使用します

(\S+)$

preg_split空白で分割し、それが返す配列の最後の要素を取得するために使用することもできます。

于 2013-01-03T20:17:02.247 に答える