2012-04-07 3 views
0

т = vjVQa1PpcFMYuRsz10_H-1z41mWWe8d6ENEnBLE7gugрегулярного выражения

, где жирный шрифт область является 42 символом маркеров

до сих пор я использую это [^ (т =)] \ S {42}, но это соответствие всех строк, как я могу получить его только соответствует, что из исходной страницы здесь вида-источник: HTTP: //www.youtube.com/watch? V = opQ9GzRe5qs

благодаря

ответ

1

страница, на которую вы ссылаетесь, не содержит кольцо, которое вы ищете? Но чтобы соответствовать этой строке в любом месте страницы, то вам нужно будет ...

/t=\S{42}/ 

Я не вижу никакой необходимости для символьных классов [...] или в скобках моделей суба ...?

EDIT # 1

Однако, если вы пытаетесь извлечь что 42 символ маркера, то вы будет нужен шаблон в скобки суб ...

/t=(\S{42})/ 

EDIT # 2

Пример извлечения токена. Я изменил это с 42 до 43 символов, так как все ваши примеры, похоже, содержат токен из 43 символов.

// This is just some example text from which we want to extract the token... 
$text = <<<EOD 
SomeText=jkasdhHASGjajAHSKAK?asdjladljasdllkasdjllasdasdl 
asdjasiSTARTHERE;t=vjVQa1PpcFMYuRsz10_H-1z41mWWe8d6ENEnBLE7gug%3DENDHEREasdasd 
SomeMoreText;t=ThisIsTooShort%3Dklaksj 
EOD; 

if (preg_match('/;t=([a-zA-Z0-9_-]{43})%3D/',$text,$matches)) { 
    // Match... vjVQa1PpcFMYuRsz10_H-1z41mWWe8d6ENEnBLE7gug 
    echo 'TOKEN: '.$matches[1]; 
} else { 
    // No match 
} 

Я изменил шаблон как более ограничительный, чем любой несимметричный символ. Теперь это буква, число, символ подчеркивания или дефис. Теперь он должен заканчиваться на %3D, а точка с запятой («;») перед «t =».

+0

токен генерируется каждый раз, когда страница загружается и имеет длину 42, поэтому мне нужно захватить эту строку после t = –

+0

. Я думаю, вам нужно уточнить свой вопрос ... вы пытаетесь _match_ эту последовательность символов (как указанному в вашем вопросе), возможно, используя 'preg_match()'? Или вы хотите _extract_ 42-символьный токен? Было бы желательно вставить текст, который вы пытаетесь сопоставить, поскольку эта страница не содержит этот шаблон. – MrWhite

+0

это токен, который генерируется каждый раз, когда кто-то загружает страницу, поэтому не удается вставить точное соответствие для него, однако я хочу извлечь этот токен, а токен имеет следующий шаблон, он начинается с t =, заканчивается% 3D и имеет длину 42, надеюсь, что у меня есть смысл, текст выше был примером токена, сгенерированного –

1

Я не использовал движок регулярных выражений PHP, но если это не идет вразрез со стандартом Posix и любой другой регулярных выражений на планете, [^(t=)] будет соответствовать любому символу, за исключением t, =, ( или ). Таким образом, ваше регулярное выражение будет соответствовать тому, за которым последуют 42 символа без пробелов. Он соответствует вашей строке, потому что на самом деле у вас на самом деле есть 43 символа. То, что вы, вероятно, имели в виду, это ^t=\S{43}$, или что-то в этом роде, возможно, это зависит от того, что вы делаете с ним.

+0

простите меня, но так как я новичок в регулярном выражении, я использую этот http://regexpal.com/ для проверки выражений, которые были указаны здесь, но оба указанных ответа, похоже, не совпадают, строка t = vjVQa1 PpcFMYuRsz10_H-1z41mWWe8d6ENEnBLE7gug –

+0

ok, теперь он, кажется, захватывает все строки с t =, поэтому как это сделать, чтобы конечная строка была% 3D? –

+0

'$' соответствует концу, и ни один из '% 3D' не является специальным символом (так как регулярные выражения идут), поэтому'% 3D $ 'будет соответствовать строке, которая заканчивается на% 3D. – Kevin

Смежные вопросы