473,396 Members | 1,989 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,396 software developers and data experts.

Stack-based behaviour of Regexes

Can anyone help me with understanding the behaviour of a Regular Expression which is said to be like that of a stack?
It says in the docs...

"(?<group1-group2>) Balancing group definition. Deletes the definition of the previously defined group name2 and stores in group name1 the interval between the previously defined name2 group and the current group. If no group name2 is defined, the match backtracks. Because deleting the last definition of name2 reveals the previous definition of name2, this construct allows the stack of captures for group name2 to be used as a counter for keeping track of nested constructs such as parentheses. In this construct, name1 is optional."

I don't understand that unfortunately. Can anyone explain that better, preferably with a simple example?

Thanks!
Nov 20 '05 #1
5 969
On Mon, 2 Aug 2004 05:31:05 -0700, Patty O'Dors
<Pa********@discussions.microsoft.com> wrote:
in <72**********************************@microsoft.co m>
Can anyone help me with understanding the behaviour of a Regular Expression which is said to be like that of a stack?
It says in the docs...

"(?<group1-group2>) Balancing group definition. Deletes the definition of the previously defined group name2 and stores in group name1 the interval between the previously defined name2 group and the current group. If no group name2 is defined, the match backtracks. Because deleting the last definition of name2 reveals the previous definition of name2, this construct allows the stack of captures for group name2 to be used as a counter for keeping track of nested constructs such as parentheses. In this construct, name1 is optional."

I don't understand that unfortunately. Can anyone explain that better, preferably with a simple example?

Thanks!


This snippet doesn't have a lot of meaning when it's taken out of
context as you've done. Provide a link to the entire document or
at least provide more of the surrounding text if you really want
a meaningful interpretation.

---
Stefan Berglund
Nov 20 '05 #2
Patty O'Dors wrote:
Can anyone help me with understanding the behaviour of a Regular Expression which is said to be like that of a stack?
It says in the docs...

"(?<group1-group2>) Balancing group definition. Deletes the definition of the previously defined group name2 and stores in group name1 the interval between the previously defined name2 group and the current group. If no group name2 is defined, the match backtracks. Because deleting the last definition of name2 reveals the previous definition of name2, this construct allows the stack of captures for group name2 to be used as a counter for keeping track of nested constructs such as parentheses. In this construct, name1 is optional."

I don't understand that unfortunately. Can anyone explain that better, preferably with a simple example?

Thanks!


If your question is, "How do I evaluate a mathematical expression?" then
here is probably a short enough answer to get you started.

Mathematical engines can evaluate expressions using two stacks.

Consider ( 7 – ( ( 5 * ( 4 + 7 ) ) + 9 ) ).

- if a number was read, push it onto the number stack
- if an operation was read, push it onto the character stack
- if a left parenthesis was read, ignore it
- if a right parenthesis was read

* pop from number stack as second operand
* pop from number stack as first operand.
* pop the operation from the character stack
* perform the operation on the two operands
* push the result onto the number stack

Once the expression is consumed, the character stack should be empty and
the number stack should contain only one value: the final result.

Of course it can get much more complicated because you would want to
parse the expression so that if the expression that you're evaluating
was typed in wrong, ie. mismatched parenthesis etc, then... you get the
idea.
HTH,

Steve
Nov 20 '05 #3
=?Utf-8?B?UGF0dHkgTydEb3Jz?=
<Pa********@discussions.microsoft.com> wrote in
news:72**********************************@microsof t.com:
Can anyone help me with understanding the behaviour of a Regular
Expression which is said to be like that of a stack? It says in
the docs...

"(?<group1-group2>) Balancing group definition. Deletes the
definition of the previously defined group name2 and stores in
group name1 the interval between the previously defined name2
group and the current group. If no group name2 is defined, the
match backtracks. Because deleting the last definition of name2
reveals the previous definition of name2, this construct allows
the stack of captures for group name2 to be used as a counter
for keeping track of nested constructs such as parentheses. In
this construct, name1 is optional."

I don't understand that unfortunately. Can anyone explain that
better, preferably with a simple example?


Here's some code I previously posted showing how to use those regex
constructs:

http://groups.google.com/groups?hl=en&lr=&ie=UTF-
8&threadm=Xns9413A56F813EDcrtimmonscrtimmonsin%402 07.46.248.16&rnum=1
&prev=/groups%3Fas_q%3Dtimmons%2520recursive%26safe%3Dima ges%26ie%3DU
TF-
8%26as_ugroup%3D*dotnet*%26as_scoring%3Dd%26lr%3D% 26num%3D100%26hl%3D
en

or

http://tinyurl.com/62bm7
--
Hope this helps.

Chris.
-------------
C.R. Timmons Consulting, Inc.
http://www.crtimmonsinc.com/
Nov 20 '05 #4
> Have you been able to expand this to more than one characters? I have nexted
XML tags that I would like to do the same thing with. Here is my best guess
(it does not work). Basically the tag is <OPTIONAL> and the end tag is
</OPTIONAL>. These can be nested with other tags in between. The regex I have
shown below allows for attributes.


Why not just use the MSXML DOM and XPath queries to find your data within the XML file? Are you just looking for <OPTIONAL> tags or
something specific within them?
Hope this helps,

Mike
- Microsoft Visual Basic MVP -
E-Mail: ED***@mvps.org
WWW: Http://www.mvps.org/EDais/
Nov 21 '05 #5
I had thought of that and that will be one possible work-around. I would like
to avoid bringing in the DOM for two reasons:

1) I am concerned about the overhead. These are relatively short strings
(most less than 1K) and the DOM seems overkill and costly in terms of cycles
and memory for just these strings. Regex can be compiled and it just seems
faster although I have not done benchmarks on it. I know there are some
constructs in the DOM that are VERY costly. Simple things like counting
elements were killing a web application that we had.
2) I want to understand how to handle nested constructs using regular
expressions. It seems to work OK for single character open and close entities
like parenthesis but it should be extendable to entities greater than one
character.

I just need the start and end of a possibly nested structure. So for example

<A> This is some text
<OPTIONAL>This is some <OPTIONAL>optional text</OPTIONAL></OPTIONAL>
<B>This is some B text
<OPTIONAL>This is some more optional text </OPTIONAL>
</A>

For the first <OPTIONAL> tag I would like the index into the string where
this begins and where the corresponding </OPTIONAL> tag ends (so the index
would essentially point to the beginning of <B>). For the next <OPTIONAL> tag
I would want the beginning and ending of that tag and content, and so forth.
If regular expressions can be used to do nested parenthesis then can't a
regular expression be put together to handle nested tags?

Kevin

"Mike D Sutton" wrote:
Have you been able to expand this to more than one characters? I have nexted
XML tags that I would like to do the same thing with. Here is my best guess
(it does not work). Basically the tag is <OPTIONAL> and the end tag is
</OPTIONAL>. These can be nested with other tags in between. The regex I have
shown below allows for attributes.


Why not just use the MSXML DOM and XPath queries to find your data within the XML file? Are you just looking for <OPTIONAL> tags or
something specific within them?
Hope this helps,

Mike
- Microsoft Visual Basic MVP -
E-Mail: ED***@mvps.org
WWW: Http://www.mvps.org/EDais/

Nov 21 '05 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

15
by: Andrew | last post by:
Last night I was reading about implementing my own stack. The example given pushes items on and off the stack at the start and end of each procedure (ie. in a std module). What's not so clear is...
14
by: Kevin Grigorenko | last post by:
Hello, I couldn't find an obvious answer to this in the FAQ. My basic question, is: Is there any difference in allocating on the heap versus the stack? If heap or stack implementation is not...
4
by: anonymous | last post by:
Thanks your reply. The article I read is from www.hakin9.org/en/attachments/stackoverflow_en.pdf. And you're right. I don't know it very clearly. And that's why I want to understand it; for it's...
8
by: LedZep | last post by:
What up everyone, I have to write a program that uses a stack to determine whether a string is a palindrome (a string that is spelled identically backward and forward). The program has to...
4
by: alisaee | last post by:
plz check what i have made wrong what is requierd her is to creat class queue and class stack and run the push,pop operation . #include<iostream.h> #include<conio.h> #include<stdio.h> class...
1
by: alfie27 | last post by:
I currently have a working program that is a stack that stores integers. Now i have to convert it to store strings instead of integers. I have been working on this for hours and just keep getting...
11
by: tom | last post by:
Hi! Im new to Python and doing exercise found from internet. It is supposed to evaluate expression given with postfix operator using Stack() class. class Stack: def __init__(self): self.items...
2
by: AZRebelCowgirl73 | last post by:
I have casted the stack so that it will print however now it does print like required however it includes un-needed stuff! (Point2D.Double) (Point 2D.Double) (Point2D.Double) (Point2D.Double)...
9
by: Tarique | last post by:
Hello all.I am trying to implement a stack which can store either integer or float values. The code is given below: #include<stdio.h> #include<stdlib.h> #include<string.h> #define...
87
by: CJ | last post by:
Hello: We know that C programs are often vulnerable to buffer overflows which overwrite the stack. But my question is: Why does C insist on storing local variables on the stack in the first...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.