Как писал SLaks, регулярное выражение не может соответствовать одному и тому же тексту более одного раза.
Вы могли бы "подделать это" так:
\b(w)((?<=w)o)?((?<=wo)rld)?
будет соответствовать w
, o
, только если ему предшествует w
*, и rld
, только если ему предшествует wo
.
Конечно, на самом деле будут совпадать только части слова, но вы увидите, совпадают ли только первая, первые две или все части, посмотрев на захваченные группы.
Таким образом, в слове want
будет совпадать w
(остальное необязательно, поэтому регулярное выражение сообщает об общем успехе.
В work
совпадет wo
; \1
будет содержать w
, а \2
будет содержать o
. rld
не удастся, но поскольку это необязательно, регулярное выражение по-прежнему сообщает об успехе.
Я добавил привязку границы слова \b
к началу регулярного выражения, чтобы избежать совпадений в середине таких слов, как reword
; если не хотите исключать эти совпадения, отбросьте \b
.
* (?<=w)
здесь на самом деле не нужен, но я сохранил его для согласованности.