farklı dizeleri bir dize ayıran php fonksiyonu?

6 Cevap

Ben burada bu dizesi vardır diyelim: $string = 'hello my name is "nicholas cage"'.

ben böyle fark dizeleri içine kelimeleri ayırmak istiyorum:

$word1 = 'hello';
$word2 = 'my';
$word3 = 'name';
$word4 = 'is';
$word5 = 'nicholas cage';

Fhe ilk 4 kelime için ben patlayabilir kullanabilirsiniz. ama word5 ile nasıl yapacağız? Ben ilk ve son adı bir dize olmak istiyorum.

6 Cevap

Eğer isteseydi str_getcsv: Ayrıca dize işlevini kullanabilirsiniz. Sadece sınırlayıcı diyoruz "" yerine "";

Örnek: $array = str_getcsv($string, " ");

Bu regexpi kullanılarak yapılabilir:

$string = 'hello my name is "nicholas cage"';
preg_match_all('/(?:"[^"]*"|\S+)/', $string, $matches);
print_r($matches[0]);

Bu, şu şekilde çalışır:

  • Find anythinh which matches:
    • "[^"]*" - çift tırnak içinde bir şey
    • \S+ - daha sonra 1 boşluk olmayan bir karakter

Ancak bu sonuç, tırnak ile. Onları da kaldırmak:

$words = array_map('remove_starting_ending_quotes', $matches[0]);
print_r($words);

function remove_starting_ending_quotes($str) {
    if (preg_match('/^"(.*)"$/', $str, $matches)) {
    	return $matches[1];
    }
    else {
    	return $str;
    }
}

Şimdi sonuç beklendiği tam olarak görünüyor:

Array
(
    [0] => hello
    [1] => my
    [2] => name
    [3] => is
    [4] => nicholas cage
)

Bu normal ifadeyi kullanabilirsiniz:

/"[^"]*"|\S+/

Bu gibi kullanabilirsiniz:

<?php
$target = 'Hello my name is "Nicholas Cage"';
$pattern = '/"[^"]*"|\S+/';
$matches = array();
preg_match_all($pattern,$target,$matches);
var_dump($matches);
?>

Bu ayrıştırma tarafından yapılır. "özyinelemeli iniş" google.

olduğunu, nicholas, kafes, merhaba, benim, isim, ancak "nicholas cage" bir varlık olduğunu bilmek için hiçbir yolu yoktur: size verecek olan, $bits = explode(' ', $string); yapabilirdi.

Sana referansı bir sözlük veritabanı çapraz ve bulunmayan herhangi bir kelime katılmak gerekebilir, istediğiniz şeyi yapmak için nasıl emin değilim.

Edit: preg_match('/([\s"])(.*?)$1/', $str, $matches);: Ben şimdi bu durumda size, gibi bir şey bir regex kullanabilirsiniz, "Nicholas Cage" alıntı bakın

Bu benim için çalıştı

$word1 = 'hello'; 
$word2 = 'my'; 
$word3 = 'name'; 
$word4 = 'is'; 
$word5 = 'nicholas cage';

$my = array($word1,$word2,$word3,$word4,$word5);


function word_split($str=array(),$words=1) {
foreach($str as $str)
{
    $arr = preg_split("/[\s]+/", $str,$words+0);
    $arr = array_slice($arr,0,$words);
    }
    return join(' ',$arr);
}

echo word_split($my,1);

döner nicholas kafes