PHP Regex Sorunu - İsteğe bağlı metin

5 Cevap php

Do Dolar Dolar veya # Doblabla (şu anda olan) vb # Doları veya # Dolar yapmak ama için aşağıdaki regex olmalıdır.

/^@(?P<name>\w+) (?P<amount>\d+) [#]?Do(?:llars?)?/i

Bunu nasıl değiştirebilirim? Artık Dogfood ve Köpekler vb maçları böylece ..

Update 3: Not Solved Afterall:

 /^@(?P<name>\w+) (?P<amount>\d+) [#]?(do(?:llars?|s))/i

Aşağıdaki eşleşmiyor:

@name 2 do

Herhangi bir düşünce?

Doks'un ve # Dox'a: İkinci sorum nasıl o zaman da maç için izin yapmak olduğunu

Yani sonunda ben maç için istiyorum

@name 2 #do
@name 2 do
@name 2 #dollars
@name 2 dollars
@name 1 dollar
@name 1 #dollar
@name 2 dox
@name 2 #dox

ve başka bir şey.

Thank you very much!

Buz

5 Cevap

Yanılmıyorsam eğer, (?:llars?)? Bunu yapmak ile başlayan her şey maç ve isteğe bağlı olduğundan ondan sonra ne olduğu umurumda değil edeceğini göstermektedir.

Dize do veya dolar biter uygulamak için sonuna bir $ ekle.

Bu sizin için bunu yapmak gerekir:

/^@(?P<name>\w+) (?P<amount>\d+) #?Do(?:llars?|x)(?:\s|$)/i

Bu, isteğe bağlı # ardından adını ve miktarını maçlar daha sonra "llar", "llars", boşluk veya dize sonu "do".

Ben Regexp.net biraz daha denemeden sonra cevap buldu

[#]?(do(?:llars?))

Satırın sonuna ve alternatifler için | operatörü işaretlemek için $ çapa kullanmak alt-1|alt-2|…:

 /^@(?P<name>\w+) (?P<amount>\d+) #?(do(?:llars?|x)?)$/i

Belki tamamen anlayış değilim, ama regex bana aşırı karmaşık görünüyor. Ne bu böyle yapıyor nesi var?

/^@name [12] #?do(llar|llars|x)?$/

Edit: Eğer söz konusu koymadı diğer şartları var gibi yorumlarla okuduktan sonra geliyor. Biz çalışmak için gerçek bir tam sorunu var ve bu yüzden bu düzenleme işler çok daha kolay olurdu.