php
2013-09-12 6 views 0 likes 
0

Я просто хочу получить строку с последующим расширением .html из строки ниже.Подстрока найти между двумя словами

пример:

login.html

forgot_password.html

admin_screen.html

delete_checklist.html

print_preview.html

Строка:

$haystack= "b='rootNodes',c='pageName',d='login',e='type',f='kjhk',g='url',h='login.html',i='children' 
    ,j='forgot password',k='forgot_password.html',l='password recovery',m='password_recovery.html',n='superadmin dashboard',o='superadmin_dashboard.html',p='admin screen',q='admin_screen.html',r='newchecklist 
    popup',s='admin_screen.html',t='delete checklist',u='delete_checklist.html',v='print preview', w='print_preview.html',x='Checklist - Normal Procedure',y='Checklist___Normal_Procedure.html', 
    z='normal procedure - insert text'" 

Я пробовал, но результат не близок.

function strallpos($haystack,$needle,$offset = 0){ 
     $result = array(); 
     for ($i = $offset; $i < strlen($haystack); $i++) { 
      echo $pos = strpos($haystack, $needle, $i); 
      if ($pos !== FALSE) { 
       $offset = $pos; 
       if ($offset >= $i) { 
        $i = $offset; 
        $pos2 = strpos($haystack, '=', $i); 

        //Here substr find 

        $result[] = $offset; 
       } 
      } 
     } 
    return $result; 
    } 
+0

protip: поместите строки в массив вместо отдельных варов. – Joren

ответ

1

Использование PCRE Утверждение (просмотра назад):

$string = 'b="rootNodes",c="pageName",d="login",e="type",f="kjhk",g="url",h="login.html",i="children" 
    ,j="forgot password",k="forgot_password.html",l="password recovery",m="password_recovery.html",n="superadmin dashboard",o="superadmin_dashboard.html",p="admin screen",q="admin_screen.html",r="newchecklist 
    popup",s="admin_screen.html",t="delete checklist",u="delete_checklist.html",v="print preview", w="print_preview.html",x="Checklist - Normal Procedure",y="Checklist___Normal_Procedure.html", 
    z="normal procedure - insert text"'; 

$pattern = '#\w+(?=\.html)#s'; 
preg_match_all($pattern, $string, $matches); 
print_r($matches); 

Array 
(
    [0] => Array 
     (
      [0] => login 
      [1] => forgot_password 
      [2] => password_recovery 
      [3] => superadmin_dashboard 
      [4] => admin_screen 
      [5] => admin_screen 
      [6] => delete_checklist 
      [7] => print_preview 
      [8] => Checklist___Normal_Procedure 
     ) 

) 
+0

из-за сложности времени и пространства ваши лучшие. :) thankx. –

2

RegEx?

$s = ' b="rootNodes",c="pageName",d="login",e="type",f="kjhk",g="url",h="login.html",i="children" 
    ,j="forgot password",k="forgot_password.html",l="password recovery",m="password_recovery.html",n="superadmin dashboard",o="superadmin_dashboard.html",p="admin screen",q="admin_screen.html",r="newchecklist 
    popup",s="admin_screen.html",t="delete checklist",u="delete_checklist.html",v="print preview", w="print_preview.html",x="Checklist - Normal Procedure",y="Checklist___Normal_Procedure.html", 
    z="normal procedure - insert text"'; 
$n=preg_match_all('/([^"]+\.html)/',$s,$m); 
echo var_export($m,true); 
1

Попробуйте это ... я думаю, что это работает

$string = 'b="rootNodes",c="pageName",d="login",e="type",f="kjhk",g="url",h="login.html",i="children" 
    ,j="forgot password",k="forgot_password.html",l="password recovery",m="password_recovery.html",n="superadmin dashboard",o="superadmin_dashboard.html",p="admin screen",q="admin_screen.html",r="newchecklist 
    popup",s="admin_screen.html",t="delete checklist",u="delete_checklist.html",v="print preview", w="print_preview.html",x="Checklist - Normal Procedure",y="Checklist___Normal_Procedure.html", 
    z="normal procedure - insert text"'; 

    $string = explode(',', $string); 
    for ($i=0; $i < count($string); $i++) { 
     $verf = strrpos($string[$i], '.html'); 
     if ($verf) 
      $pos[] = $verf; 
    } 

    for ($i=0; $i < count($pos); $i++) { 
     echo "index: ".$pos[$i].'<br>'; 
    } 
+0

Хмм спасибо, но с этим мне нужно больше упражнений. действительно хорошо –

1

Вот взрываются, который работает:

<?php 
$a = 'b="rootNodes",c="pageName",d="login",e="type",f="kjhk",g="url",h="login.html",i="children"' . 
    ',j="forgot password",k="forgot_password.html",l="password recovery",m="password_recovery.html",n="superadmin dashboard",o="superadmin_dashboard.html",p="admin screen",q="admin_screen.html",r="newchecklist' . 
    'popup",s="admin_screen.html",t="delete checklist",u="delete_checklist.html",v="print preview", w="print_preview.html",x="Checklist - Normal Procedure",y="Checklist___Normal_Procedure.html",' . 
    'z="normal procedure - insert text"'; 

$ex = explode (',' , $a); 
foreach ($ex as $pair) { 
    $str = str_replace('"', '', $pair); 
    $ex2 = explode('=', $str); 
    if (substr($ex2[1], -5) === '.html') { 
     echo $ex2[1] . '<br>'; 
    } 
} 

Результаты ...

 
login.html 
forgot_password.html 
password_recovery.html 
superadmin_dashboard.html 
admin_screen.html 
admin_screen.html 
delete_checklist.html 
print_preview.html 
Checklist___Normal_Procedure.html 

Вы можете поместить его в массив, а не эхом его.

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