Re: Balanced match with std.regex

2015-12-15 Thread wobbles via Digitalmars-d-learn

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!


Re: Balanced match with std.regex

2015-12-14 Thread crimaniak via Digitalmars-d-learn

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.



Re: Balanced match with std.regex

2015-12-14 Thread Xinok via Digitalmars-d-learn

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


Re: Balanced match with std.regex

2015-12-14 Thread Jakob Ovrum via Digitalmars-d-learn

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.


Re: Balanced match with std.regex

2015-12-14 Thread Chris Wright via Digitalmars-d-learn
On Tue, 15 Dec 2015 00:16:41 +, 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).


Balanced match with std.regex

2015-12-14 Thread Jakob Ovrum via Digitalmars-d-learn

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]