2010-05-25 19 views
5

RegExp'i birkaç kez bıraktım ama yine de uzman olmaktan çok uzaktayım. Bu sefer regExp tarafından bir formül (veya matematik ifadesi) doğrulamak istiyorum. Buradaki zor kısım, uygun başlangıç ​​ve bitiş parantezlerini formülde doğrulamaktır.
İnanıyorum ki, internette bir örnek olmalı, ancak bulamadım. Birisi böyle bir örnek için bir bağlantı gönderebilir mi? veya başka yollarla bana yardım et?Formülü doğrulamak için RegExp (eşleşen parantezli matematik ifadesi)?

cevap

5

Eşleşen iç içe parantezli diller normal diller değildir ve bu nedenle normal ifadeler tarafından tanınamazlar. Düzenli ifadenin bazı uygulamalarının (örneğin .NET çerçevesinde) bununla uğraşmak için uzantıları vardır, ancak bununla çalışmak gerçekten eğlenceli değildir. Bu yüzden, mevcut bir ayrıştırıcıyı kullanmayı veya basit bir ayrıştırıcıyı kendiniz uygulamanızı öneririm (eğlence uğruna).

.NET uygulamasındaki uzantı için MSDN on balancing groups'a bakın. Kelimeleri ağzımdan çektiğinizde,

+0

Bu RegExp'i, bir özniteliğin değerini doğrulamak için XML şemasındaki bir model olarak kullanmaktaydım. Bu bağlamda herhangi bir öneriniz var mı? – WSK

+0

* ama bu gerçekten çalışmak için eğlenceli değil * bir understatement! Böyle canavarları parçalamaya çalışmak bir kabus! :) –

+0

XML alanından mevcut araçları kullanmak istiyorsanız XSLT'yi kullanmayı deneyebilirsiniz. XSLT bir Turing-complete dilidir ve bu nedenle işi yapabilir, ancak bunun ne kadar çaba göstereceğini ve sonucun güzel bir kod parçası olacağını söyleyemem. –

3

Matematiksel ifadeniz, eşleşen iç içe geçmiş parantez içeriyorsa, normal bir dilbilgisi değil, bağlamsal olmayan bir yöntemdir ve bu nedenle normal ifadeler kullanılarak ayrıştırılamaz.

+0

+1. Birisi backtracking ile yakın olabilir, ancak bu sınırlı ve tam olarak, bir kesmek ve iş için yanlış bir araç kullandığınız bir işarettir. –

+0

Daha iyi doldurulan: * özyinelemeli eşleşmeyi desteklemeyen düzenli ifadeler kullanılarak ayrıştırılamaz * (Perl, PHP ve .NET * bunu * yapabilir *). –

+0

@Bart - o dili belirtmemişti, bu yüzden standart bir regex olduğunu, Perl'in – DVK