2013-02-18 34 views
9

Tamam, bu nedenle bu regex ile yaşlarım için güreştim ve işe yaramayacağım.PHP normal ifadesi kelimelere eşleşecek şekilde

yapmak istiyorum ne: Ben kelimeleri içeren bir dize dizisi, olmayan herhangi bir kelime karakterle öncesinde her istediğiniz bir dize Verilen

.

Örnek girdi dizesi: dizesindeki

one "two" (three) -four-

kelime noktalama işaretleri veya simgelerin herhangi miktarda bir şey, hatta anlamsız olabilir. Ben görmek istiyorum ne

:

array: 
one 
"two 
" (three 
) -four 
-

Esasen, her son şey maç için bir önceki eşleşmeyi arta kalan herhangi bir şey öncesinde, bir kelimedir.

Bu soruya değindiğim gibi, bunu PHP'de kullanacağım, preg_match_all() ve preg_split() öğelerinin çeşitli kombinasyonlarını denedim; "\ w", "\ b", "^\ w] "vb.

Bigger Picture

Esasen ben sadece arama amaçları için dizede her kelimeden sonra bir * yerleştirmek istiyorum.

Ben gerçekten regex biri değilim, bu yüzden yardım takdir!

+0

Senin * ne görmek istiyorum * bölüm, sonraki satırda olması gerekiyordu dört sonra teklif mi? – LeonardChallis

+0

Doğru, gönderdiğimde tırnakların değiştirilmiş gibi görünüyor, şimdi düzeltdim, bu sefer doğru bir şekilde geçtiklerini umuyorum. – Testic

cevap

8

Bunu yapabilirdi:

<?php 
$test = 'one "two" (three) -four-'; 

echo preg_replace('/(\w+)/', "$1*", $test); 
?> 

http://phpfiddle.org/main/code/8nr-bpb

+0

Bu da muhteşem bir şekilde çalışır! Muhtemelen beni daha sonradan maçlar arasında döngüden kurtardığı için kullanacağım. – Testic

7

Bunu, sözcük sınırları üzerinde bölmek için bir negatif ileri yönlü kullanabilirsiniz:

$array = preg_split('/(?!\w)\b/', 'one "two" (three) -four-'); 

A print_r($array);gives you istenen tam çıkışı:

Array 
(
    [0] => one 
    [1] => "two 
    [2] => " (three 
    [3] =>) -four 
    [4] => - 
)
+0

Bu muhteşem çalışır! – Testic

0
burada

bir kelime bulmak için nasıl bir örnek PHP'de regex ile. Sadece her bir "kelime" sonra bir yıldız işareti eklemek istiyorsanız

<?php 
$subject = "abcdef"; 
$pattern = '/^def/'; 
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE); 
print_r($matches); 
?> 
0

Sen eşleşmesi gerekir alternatif

[^\w]*(\b\w*\b)? 
----- ---------- 
|  | 
|  |->matches a word 0 or 1 time 
|->matches 0 to many characters except [a-zA-Z0-9_] 

!

İlgili konular