в общем стоит задача в тексте найти слово и слово справа отнего и слева от него(как бы словосочетание) вот параметр передается из формы в пост, вот такая регулярка у меня вышла Код (Text): "/[a-z]+?".$_POST["what"]."[a-z]+?/" работает норм находит слово целиком если передается пара букв из этого слова, а мне нужно еще найти слова которые его окружают дописал значит вот так Код (Text): "/[^|\s]?(.+?)[\s]?[a-z]+?".$_POST["what"]."[a-z]+?[\s]?(.+?)[\s|$]/" и значит правое слово берет правильно именно одно слово а слева(перед параметром) не слово до пробела а до начала строки, то есть 2 3 или больше слов, помогите с этим, не понимаю.что я сделал не так
и как это поможет? у меня не обрабатывает правильно почемут начало, покажи как должна выглядеть регулярка
вношу подробности есть 4 файла... текст всех по очереди "vasya go up" "vasya go down" "petya + vasya = down" "petya down vasya" с моей регуляркой "/[^|\s]?(.+?)[\s]?[a-z]+?".$_POST["what"]."[a-z]+?[\s]?(.+?)[\s|$]/" вот такой вывод Array ( [0] => vasya go [1] => v [2] => go ) Array ( [0] => vasya go [1] => v [2] => go ) Array ( [0] => petya + vasya = [1] => etya + [2] => = ) Array ( [0] => petya down vasya [1] => etya down [2] => )
PHP: <pre> <?php $Phrases = array( 'vasya go up', 'vasya go down', 'petya + vasya = down', 'petya down vasya' ); $_POST['what'] = 'go'; foreach( $Phrases as $Phrase) { preg_match_all('/([\w]+ ' .preg_quote( $_POST['what']) .' [\w]+)/', $Phrase, $matches); echo 'Phrase: ' .$Phrase .'<br />Array: ' .print_r( $matches, true) .'<br /><br />'; } ?> </pre> Код (Text): Phrase: vasya go up Array: Array ( [0] => Array ( [0] => vasya go up ) [1] => Array ( [0] => vasya go up ) ) Phrase: vasya go down Array: Array ( [0] => Array ( [0] => vasya go down ) [1] => Array ( [0] => vasya go down ) ) Phrase: petya + vasya = down Array: Array ( [0] => Array ( ) [1] => Array ( ) ) Phrase: petya down vasya Array: Array ( [0] => Array ( ) [1] => Array ( ) )
у меня preg_match("/([\w]+ ".preg_quote( $_POST['what'])." [\w]+)/",$str,$arr); возвращает пустые 4 массива. просто видимо из-за того,что у тебя все переменные в строках а у меня в файл записаны. попробуй плз создать 4 файла и записать в них эти строки(все в утф-8)
Можете ли Вы - я не знаю, но я Вам это разрешаю. Вы можете скопировать содержание файлов в следующий пост. Только, пожалуйста, заключите код в ббкод PHP.
neverlose этот код срабатывает если запрос на поиск целое слово, а мне же еще нужно чтоб и часть по сти искала например sy из vasya находило то же что и vasya и еще не работает с русс буквами
С этого и надо было начинать. PHP: preg_match("/([\w]* ?[\w]*".preg_quote( $_POST['what'])."[\w]* ?[\w]*)/",$str,$arr);
neverlose вот так отлично получилось,только не работает с русскими запросами, подскажи уже до конца пожалуйста
как в последнем примере рус не находит а англ находит с ошибками =( то есть нужно вернуться к предпоследнему варианту