альтернативный жадный матч - PullRequest
1 голос
/ 31 марта 2011

Я хочу, чтобы жадный соответствовал альтернативе либо от нуля до 'm' последовательных вхождений 'a', либо от нуля до 'n' последовательных вхождений 'b'.Если я сделаю

/a{,m}|b{,n}/

, это не сработает, потому что когда у меня есть последовательности 'b', он будет совпадать с 'a {, m}', а альтернатива 'b {, n}' не будетсмотреть, и это не будет жадным совпадением.

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Если я понимаю, что вы пытаетесь сделать правильно, как насчет /(?:a{1,m}|b{1,n})?/

Это будет соответствовать либо строке последовательных a (до m раз), либострока последовательных b (до n раз) или вообще ничего из-за необязательного ?.

0 голосов
/ 31 марта 2011

Я думаю, что по умолчанию квантификаторы жадные и слева направо. Так что на самом деле это не жадная проблема: у вас есть a {0, m} в сопоставлении чередования в присутствии не a. Это соответствовало бы «м», если бы они присутствовали первыми.

Жадность кажется более сложной, чем кто-либо мог предположить.

'aaaaaaaaaa' = ~ /(a{1,2}) (a{1,2}?) (a{1,4}) (a{4,12}+)/x &&
печать "'$1', '$2', '$3', '$4' ";

'aa', 'a', 'aaa', 'aaaa'

...