Burada basit bir Düzenli İfadeler Need

4 Cevap php

Sonunda Vikipediler wiki metni ile ayrıştırma. Ben burada aşağıdaki metin türü var:

{{Airport-list|the Solomon Islands}}

* '''AGAF''' (AFT) – [[Afutara Airport]] – [[Afutara]]
* '''AGAR''' (RNA) – [[Ulawa Airport]] – [[Arona]], [[Ulawa Island]]
* '''AGAT''' (ATD) – [[Uru Harbour]] – [[Atoifi]], [[Malaita]]
* '''AGBA''' – [[Barakoma Airport]] – [[Barakoma]]

Ben desen ile başlar, tek bir dizideki tüm satırları almak gerekir

* '''

Ben normal bir ifade burada sipariş denilen olacağını düşünüyorum ama ben gerçekten olsa benim düzenli ifadeler parçası berbat ediyorum.

Ayrıca başka bir örnekte Aşağıdaki metin var:

{{otheruses}}
{{Infobox Settlement
|official_name          = Doha
|native_name    	= {{rtl-lang|ar|الدوحة}} ''ad-Dawḥa''
|image_skyline          = Doha Sheraton.jpg
|imagesize              = 
|image_caption          = West Bay at night
|image_map              = QA-01.svg
|mapsize                = 100px
|map_caption            = Location of the municipality of Doha within [[Qatar]].
|pushpin_map            =
|pushpin_label_position = 
|pushpin_mapsize        = 
|subdivision_type       = [[Countries of the world|Country]]
|subdivision_name       = [[Qatar]]
|subdivision_type1      = [[Municipalities of Qatar|Municipality]]
|subdivision_name1      = [[Ad Dawhah]]
|established_title      = Established
|established_date       = 1850
|area_total_km2         = 132
|area_total_sq_mi       = 51
|area_land_km2          = 
|area_land_sq_mi        = 
|area_water_km2         = 
|area_water_sq_mi       = 
|area_water_percent     = 
|area_urban_km2         = 
|area_urban_sq_mi       =
|area_metro_km2         = 
|area_metro_sq_mi       = 
|population_as_of       = 2004
|population_note        = 
|population_footnotes = <ref name=poptotal>[http://www.planning.gov.qa/Qatar-Census-2004/Flash/introduction.html Qatar 2004 Census]</ref>
|population_total       = 339847
|population_metro       = 998651
|population_density_km2 = 2574
|population_density_sq_mi = 6690
|latd=25 |latm=17 | lats=12 |latNS=N 
|longd=51|longm=32 | longs=0| longEW=E 
|coordinates_display    = inline,title
|coordinates_type       = type:city_region:QA
|timezone               = [[Arab Standard Time|AST]]
|utc_offset             = +3
|website                = 
|footnotes              = 
}} <!-- Infobox ends -->
'''Doha''' ({{lang-ar|الدوحة}}, ''{{transl|ar|ad-Dawḥa}}'' or ''{{unicode|ad-Dōḥa}}'') is the [[capital city]] of [[Qatar]].  It has a population of 400,051 according to the 2005 census,<ref name="autogenerated1">[http://www.hotelrentalgroup.com/Qatar/Sheraton%20Doha%20Hotel%20&%20Resort.htm Sheraton Doha Hotel & Resort | Hotel discount bookings in Qatar<!-- Bot generated title -->]</ref> and is located in the [[Ad Dawhah]] municipality on the [[Persian Gulf]].  Doha is Qatar's largest city, with over 80% of the nation's population residing in Doha or its surrounding [[suburbs]], and is also the economic center of the country. 
It is also the seat of government of Qatar, which is ruled by [[Sheikh Hamad bin Khalifa Al Thani]]–the current ruling Emir of Qatar.

Ben burada InfoBox ayıklamak gerekir. Infobox ve ilk geçtiği arasındaki tüm metin içerir

{{Infobox Settlement

ve ilk geçtiği ile biter

}} <!-- Infobox ends -->

Düzenli ifadeler geliyor ve ben burada yardım kullanabilirsiniz zaman ben tamamen kaybettim. Ben Php kullanıyorum.


EDIT! HELP!

Ben 40 saat boyunca mücadele ettik ve ben doğru çalışması için aptal düzenli ifade alınamıyor: (şimdiye kadar sadece bu var:

{{Bilgikutusu [^ \ b (\ r | \ n)}} (\ r | \ n) \ b] * [\ b (\ r | \ n)}} (\ r | \ n) (\ r | \ n) \ b]

Ama onun ben arasındaki bütün dize verileri okumak {{infobox ve \ n} ile biter} \ n istiyorum çalışmıyor

Ben Php kullanıyorum ve işe bu alınamıyor: (Sadece} in ilk örneği döndürür} Ben Satır beslemeyi önceki ile}} almak istediğiniz gerçeğini görmezden Ben bu benim aklı daha fazla atık lütfen önce Yardım. : '(

4 Cevap

Ben InfoBox ayıklamak gerekir ...

Bu deneyin, emin dotall modunu yapım bu kez enabled:

\{\{Infobox.*?(?=\}\} <!-- Infobox ends -->)


And again, explanation for that:

(?xs)    # x=comment mode, s=dotall mode
\{\{     # two opening braces (special char, so needs escaping here.)
Infobox  # literal text
.*?      # any char (including newlines), non-greedily match zero or more times.
(?=      # begin positive lookahead
\}\}     # two closing braces
<!-- Infobox ends --> # literal text
)        # end positive lookahead

Bu kadar maç (ama hariç) olacak ifadeyi - biten lookahead kendisini kaldırmak ve gerekirse, bu sonla dahil olması için sadece içeriği içerebilir.

Cevaplamak için Yorumlarınız dayalı güncelleme:

\{\{Infobox.*?(?=\n\}\}\n)

Yukarıdaki ile aynı, ancak ilerleme, kendi satırında iki parantez arar.

Ayrıca Açıklamayı izin vermek için isteğe bağlı olarak, kullanımı:

\{\{Infobox.*?(?=\n\}\}(?: <!-- Infobox ends-->)?\n)

MediaWiki açık kaynak. Onların source code bakabilirsiniz ... ;-)

Ben en iyi yolu özellikle infobox için, tek bir dizeye tüm satırları birleştirmek olduğunu düşünüyorum.

Sonra çizgisinde bir şey

$ Reg = "\ n (\ *'' '[^ \ n] *)";

İlk bölümde ('' '* ile başlar ve yeni bir çizgi değil, yeni bir satırdan sonra her şey) için.

And for the second part I'm not quire sure right now, but this is a nice place to play around a bit: http://www.solmetra.com/scripts/regex/index.php

And here is a short reference for regular expression syntax: http://www.regular-expressions.info/reference.html

Ben desen ile başlar, tek bir dizideki tüm satırları almak gerekir * '''

Satırlı modunu etkinleştirmek ve mod, disabled dotall sağlamak ve bu kullanın:

^\* '''.*$


That expression dissected is:

(?xm-s) # Flags:
        # x enables comment mode (spaces ignore, hashes start comments)
        # m enables multiline mode (^$ match lines)
        # -s disables dotall (. matches newline)
^       # start of line
\*      # literal asterisk
[ ]     # literal space (needs braces in comment mode, but not otherwise)
'''     # three literal apostrophes
.*      # any character (excluding newline), greedily matched zero or many times.
$       # end of line