The Regexp is no longer a neat little machine that
non-capturing
references:
(?=non-captured text)
I think this may be what I should use. Also, the sugestion of using word
edge tokens works for the specific case.
But the two alternatives work much the same way – they examine text
that is
preserved as part of the overall regular expression. All that changes
is /how/ the text is preserved.
So, to move ahead, please post a specific example of what you need. Post
an
example of the original string and the desired replacement.
Well, I have a solution for the specific case. That’s not what I’m
getting at though. I’m trying to find out if regexp allow me to do
something more general. I want to do this (sorry, I don’t have a ruby to
hand):
class CodeFragment
attr_accessor :code_fragment
def variables_regexp
/\b[xyz]\b/
end
def utilised_variables
code_fragment.scan(variables_regexp).uniq.sort
end
def output_substitution(substitutes)
code_fragment.gsub(variables_regexp) do |v|
substitutes[v[0]]
end
end
end
cf = CodeFragment.new
cf.code_fragment = “sin(x+y)”
puts cf.output_substitution({‘x’=>1, ‘y’=>2})
should give “sin(1+2)”
What I want is for the thing that provides the regular expression to not
need to know about the function that is using it; and for the functions
that uses the regular expression to not know about the expression
provided.
regular
expression. It /is/ possible to take a first step by posting an example
of
original text, and replacement text. Maybe we should try that.
Thank you for your help here.
I’m not trying to solve a single problem though, I’m trying to
understant what kinds of problem I can solve.
I want something that acts as an abstract machine for finding things in
a string (in this case variables, but the rules could be more complex).
One should be able to use this machine without knowing what it finds, or
how it finds. All I should need to know is that it finds things. I’m
trying to understand if regexps are able to do this - to provide this
separation. Perhaps they don’t, which is fine. I’d just like to know if
they do or not, or if they do a bit, how much.
Thanks,
Benjohn