Thread overview
Balanced match with std.regex
Dec 15, 2015
Jakob Ovrum
Dec 15, 2015
Chris Wright
Dec 15, 2015
Jakob Ovrum
Dec 15, 2015
Xinok
Dec 15, 2015
wobbles
Dec 15, 2015
crimaniak
December 15, 2015
Is there a way to do balanced match with std.regex?

Example (from [1]):

test -> funcPow((3),2) * (9+1)

I want to match the funcPow((3),2) bit, regardless of the depth of the expression in funcPow(*).

https://stackoverflow.com/questions/7898310/using-regex-to-balance-match-parenthesis [1]

December 15, 2015
On Tue, 15 Dec 2015 00:16:41 +0000, Jakob Ovrum wrote:

> Is there a way to do balanced match with std.regex?
> 
> Example (from [1]):
> 
> test -> funcPow((3),2) * (9+1)
> 
> I want to match the funcPow((3),2) bit, regardless of the depth of the
> expression in funcPow(*).
> 
> https://stackoverflow.com/questions/7898310/using-regex-to-balance-
match-parenthesis
> [1]

I don't think so.

std.regex looks like it implements only a deterministic finite automaton, whereas what you are looking for requires a push-down automaton. It just so happens that a few popular regex libraries implement PDAs rather than DFAs (and have associated changes to their regex syntax to make it work, albeit inelegantly).
December 15, 2015
On Tuesday, 15 December 2015 at 01:07:32 UTC, Chris Wright wrote:
> I don't think so.
>
> std.regex looks like it implements only a deterministic finite automaton, whereas what you are looking for requires a push-down automaton. It just so happens that a few popular regex libraries implement PDAs rather than DFAs (and have associated changes to their regex syntax to make it work, albeit inelegantly).

Thanks, that makes sense.

String manipulation in D without regex is pretty nice anyway, so it's not a big loss.
December 15, 2015
On Tuesday, 15 December 2015 at 01:29:39 UTC, Jakob Ovrum wrote:
> Thanks, that makes sense.
>
> String manipulation in D without regex is pretty nice anyway, so it's not a big loss.

There is a library named Pegged which can match against balanced parens:

https://github.com/PhilippeSigaud/Pegged
December 15, 2015
On Tuesday, 15 December 2015 at 00:16:41 UTC, Jakob Ovrum wrote:
> Is there a way to do balanced match with std.regex?

It's only possible with (?R) implemented: http://php.net/manual/en/regexp.reference.recursive.php
But there is no (?R) in D regex implementation.

December 15, 2015
On Tuesday, 15 December 2015 at 02:35:34 UTC, Xinok wrote:
> On Tuesday, 15 December 2015 at 01:29:39 UTC, Jakob Ovrum wrote:
>> Thanks, that makes sense.
>>
>> String manipulation in D without regex is pretty nice anyway, so it's not a big loss.
>
> There is a library named Pegged which can match against balanced parens:
>
> https://github.com/PhilippeSigaud/Pegged

Pegged is amazeballs.
Can build some v cool things with it. Particularly with some CTFE abuse!