Таким образом, у меня есть тот же пример, который задан, и это xml содержит такие вещи, как следующая разметка mediawiki:
"... собранный в XII веке, из которых [[Александр Великий]] был героем и в котором он был представлен, несколько похожим на англичан [[Артур Артур]]"
используя это регулярное выражение:
Pattern p = Pattern.compile("\\[\\[([\\w | \\w]+)\\]\\]");
Он работает нормально, и я получаю этот результат:
Alexander the Great
King Arthur|Arthur
Проблема: если бы у меня был такой текст, как [[Alexander|the |Great]]
с двумя или несколькими вертикальными полосами, это не должно совпадать, но оно соответствует.
Поэтому я изменил свое регулярное выражение на соответствие только одной вертикальной панели, но не работал:
Pattern p = Pattern.compile("\\[\\[([\\w |? \\w]+)\\]\\]");
Чтобы найти выражения внутри [[
и ]]
которые содержат буквенно-цифровые символы, пробелы и ровно один канал, вы можете использовать следующее регулярное выражение
\[\[[\w ]+[\|]{1}[\w ]+\]\]
Однако это относится только к тем случаям, когда труба не является первым или последним символом, но, исходя из вашего вопроса, эта ситуация не должна возникать.
Вы можете использовать это:
Pattern p = Pattern.compile("\\[\\[([\\w ]+\\|?[\\w ]*)\\]\\]");
или, как в комментариях от @fge:
Pattern p = Pattern.compile("\\[\\[([\\w ]+(?:\\|[\\w ])?)\\]\\]");
\[\[(\w+(?:|\w+)?\]\]