Forum Moderators: phranque
The hyphen plays two roles within character alternation [groups]. It can represent either a literal hyphen or a "range indicator" (as in "a-z"). The interpretation of the hyphen, if ambiguous, can vary among regular-expressions processing libraries. So, it's best to avoid ambiguity, and where it might exist, to escape the hyphen so as to disambiguate it:
If you wish to match hyphens in your pattern:
^(portfolio/clients/[a-z0-[b]9\-][/b]+)/$
^(portfolio/clients/[a-z0-9]+)/$