Kaçış ->

5 Cevap php

Ben bizim PHP kod dosyaları tagname ve özelliklerini ayrıştırmak ve geri dönmek gerekir:

<ct:tagname attr="attr1" attr="attr2">

Bu amaçla aşağıdaki normal ifade inşa edilmiştir:

(\<ct:([^\s\>]*)([^\>]*)\>)

Beklendiği gibi bu ifade çalışır ancak aşağıdaki kod ayrıştırılır zaman tatili

<ct:form/input type="attr1" value="$item->field">

Orijinal düzenli ifade, çünkü $ item-> alanında> karakteri kırar. > Veya => ama tek> - Ben görmezden normal ifadesini oluşturmak gerekir.

Ben ... Şimdiden yardımlarınız için teşekkürler herhangi bir öneri açığım.

5 Cevap

Böyle olumsuz Geriye İlerleme kullanarak deneyebilirsiniz:

(\<ct:([^\s\>]*)(.*?)(?<!-|=)\>)

Maçlar:

<ct:tagname attr="attr1" attr="attr2">
<ct:form/input type="attr1" value="$item->field">

Bu durum için en uygun çözüm, ama bu kısıtlamaları saygı değil emin olun.

Bu deneyin:

<ct:([^\s\>]*)((?:\s+\w+\s*=\s*(?:"[^"]*"|'[^']*')\s*)*)>

XML Ama eğer, kullanımı daha iyi bir XML ayrıştırıcı kullanmak gerekir.

Genel olarak, herhangi bir ayrıştırma sorun hızla bağlam serbest ama düzenli değil dil yapıları içine çalışır. Bu ilgilendiğiniz unsurları dışında her şeyi görmezden gelerek, bir bağlam serbest ayrıştırıcı yazmak için daha iyi [1] bir çözüm olabilir

Mutlaka Right Thing olmak bir bakış açısı değil, yatırım birinde bir dönüş görüldüğü gibi [1] "daha iyi".

Ben ne yapmak istiyorum -> ve => tanımıyor olduğunu düşünüyorum, ama tırnak çiftleri arasındaki her şeyi görmezden geliyor.

Ben ((takarak yapılabilir düşünüyorum

("[^"]*")*

)) Elverişli yerde.

Benim önerim aynı ifadede öznitelikleri maç.

\<ct:([^\s\>]*)((([a-x0-9]+)=\"([^\"]*)\")*)\>

edit: xml nitelik değerleri geçerli olmaması> konusunda parçası kaldırıldı.