Hi Folks,

Is there a way ask a regex if it matches any part of a string? matches: wants an exact match, and matchesPrefix: clearly only matches a prefix. The best I found was to abuse matchesIn: and check the size of the response, but this is not very clean.

Does anybody know if there is a better way?

normalize: url
        | normal re |
        ...
        re := '[^/]+\/\.\.\/' asRegex.
[ (re matchesIn: normal) notEmpty ] whileTrue: [ normal := re copy: normal replacingMatchesWith: '' ].
        ^ normal

Here I am collapsing ".." navigations within a URL against parent directories, as long as there is such a match. But copy:replacingMatchesWith: considers submatches, whereas matches: does not. Bummer.

---

A second question: I would like to strip a string prefix if it matches. Since this is a literal string, I should not need regexes. But I cannot find a nice existing method to do this. With regexes I must escape all special regex chars:

localize: url
        "remove prefix if url is for this website"
self aliasesAsRegexes do: [ :re | (re matchesPrefix: url) ifTrue: [ ^ re copy: url replacingMatchesWith: '' ] ].
        ^ url

This is supposed to delete all known aliases for a given web site from the start of a url to turn them into local urls.

aliasesAsRegexes
        aliasesAsRegexes ifNil: [
        aliasesAsRegexes := aliases collect: [:alias |
                alias := '\/' asRegex copy: alias replacingMatchesWith: '\/'.
                alias := '\~' asRegex copy: alias replacingMatchesWith: '\~'.
                alias := '\:' asRegex copy: alias replacingMatchesWith: '\:'.
                alias := '\.' asRegex copy: alias replacingMatchesWith: '\.'.
                alias asRegex
                ]].
        ^ aliasesAsRegexes

Bleh!  I am ashamed to have to write such crappy code.

The Method Finder did not find me a cool method to do this:

'abra' . 'abracadabra' . 'cadabra'

Thanks for any hints.

- on

_______________________________________________
Beginners mailing list
Beginners@lists.squeakfoundation.org
http://lists.squeakfoundation.org/mailman/listinfo/beginners

Reply via email to