SORU
18 AĞUSTOS 2010, ÇARŞAMBA


Sigara yakalayan bir grup nedir? (?:)

Bazı dersler okuduktan sonra ben hala anlamadım.

Birisi ?: nasıl kullanıldığını ve ne işe yaradığını açıklayabilir mi?

CEVAP
18 AĞUSTOS 2010, ÇARŞAMBA


Bana bunu bir örnekle açıklayayım.

Düşünün şu metin:

http://stackoverflow.com/
http://stackoverflow.com/questions/tagged/regex

Eğer düzenli aşağıda üzerine sürün şimdi, Eğer...

(http|ftp)://([^/\r\n] )(/[^\r\n]*)?

... Aşağıdaki sonucu alıyorum:

Match "http://stackoverflow.com/"
     Group 1: "http"
     Group 2: "stackoverflow.com"
     Group 3: "/"

Match "http://stackoverflow.com/questions/tagged/regex"
     Group 1: "http"
     Group 2: "stackoverflow.com"
     Group 3: "/questions/tagged/regex"

Ama kuralı -- sadece URL, host ve yol istiyorum umurumda değil. Yani, düzenli olmayan grup yakalama (?:) içerecek şekilde değiştirdim.

(?:http|ftp)://([^/\r\n] )(/[^\r\n]*)?

Şimdi, benim sonuç bu gibi görünüyor:

Match "http://stackoverflow.com/"
     Group 1: "stackoverflow.com"
     Group 2: "/"

Match "http://stackoverflow.com/questions/tagged/regex"
     Group 1: "stackoverflow.com"
     Group 2: "/questions/tagged/regex"

Gördün mü? İlk grup yakalandı. Çözümleyici bu metni eşleştirmek için kullanır, ama daha sonra yok sayar, nihai sonucu.


DÜZENLEME:

İstediğiniz gibi, beni grupları da anlatmaya çalışayım.

Peki, gruplar ve birçok amaca hizmet eder. Sana daha büyük bir maç da adlandırılabilir) tam bilgi ayıklamak için yardımcı olabilir, size önceki eşleşen bir grup rövanş izin ve kısaltmaları için kullanılabilir. Bazı örnekler deneyin, bakalım olur mu?

Tamam, XML veya HTML (regex may not be the best tool for the job ama örnek olarak iyi olduğunu unutmayın) bir tür olduğunu varsayalım. Etiketleri ayrıştırmak için istediğiniz, bu alanlarda daha kolay anlamak için yapmak için ekledim) gibi bir şey yapabilirsin:

   \<(?<TAG>. ?)\> [^<]*? \</\k<TAG>\>
or
   \<(. ?)\> [^<]*? \</\1\>

İlk düzenli ikincisi ortak bir grup kullanırken adlı bir grup (TAG) vardır. Hem yukarıdaki diyagram aynı şeyi: ilk gruptan değeri kullanın (etiket adı) kapanış bu maç için. Fark birincisinin adı değeri kullanmak için kullanır ve ikinci bir grup Dizini 1'den başlar) kullanır.

Hadi şimdi biraz oyuncu değişikliği deneyin. Düşünün şu metin:

Lorem ipsum dolor sit amet consectetuer feugiat fames malesuada pretium egestas.

Şimdi, bu aptal düzenli kullanalım:

\b(\S)(\S)(\S)(\S*)\b

Bu düzenli ifade en az 3 karakter içeren sözcükleri eşleştirir ve gruplar ilk üç harfi ayırmak için kullanır. Sonuç şu:

Match "Lorem"
     Group 1: "L"
     Group 2: "o"
     Group 3: "r"
     Group 4: "em"
Match "ipsum"
     Group 1: "i"
     Group 2: "p"
     Group 3: "s"
     Group 4: "um"
...

Match "consectetuer"
     Group 1: "c"
     Group 2: "o"
     Group 3: "n"
     Group 4: "sectetuer"
...

Eğer yedek dize uyguluyoruz...

$1_$3$2_$4

... üzerine, ilk grup, bir alt çizgi eklemek, üçüncü grup, ikinci grup, başka bir çizgi ekleyin ve dördüncü grup için çalışıyoruz. Sonuç dizesi aşağıdaki gibi olacaktır.

L_ro_em i_sp_um d_lo_or s_ti_ a_em_t c_no_sectetuer f_ue_giat f_ma_es m_la_esuada p_er_tium e_eg_stas.

Kısaltmaları da kullanarak{name} $adlandırılmış gruplar kullanabilirsiniz.

Etrafta yukarıdaki diyagram ile oynamak için, "" sekme ile bazı temel talimatları hızlı erişim. Dil Öğeleri bir güzel olan Rad Software Regular Expression Designer, tavsiye ederim En temel alıyor .NET düzenli ifade motoru.

Örneğin, birçok online araçlar ile düzenli test edebilirsiniz: http://regex101.com/ http://regexpal.com/.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 10 Daughters, 2 Sons

    10 Daughters

    10 Mart 2009
  • FrameCityJackal

    FrameCityJac

    4 Aralık 2010
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009