str.matches(regex)
ведет себя как Pattern.matches(regex, str)
, который пытается совместить всю входную последовательность с шаблоном и возвращает
blockquote>
true
, если и только если, вся входная последовательность соответствует шаблону этого шаблона. В то время как
matcher.find()
пытается найти следующую подпоследовательность входной последовательности, которая соответствует шаблону и возвращаетblockquote>
true
, если и только если подпоследовательность входной последовательности соответствует шаблону этого шаблона. Таким образом, проблема связана с регулярным выражением. Попробуйте следующее.
String test = "User Comments: This is \t a\ta \ntest\n\n message \n"; String pattern1 = "User Comments: [\\s\\S]*^test$[\\s\\S]*"; Pattern p = Pattern.compile(pattern1, Pattern.MULTILINE); System.out.println(p.matcher(test).find()); //true String pattern2 = "(?m)User Comments: [\\s\\S]*^test$[\\s\\S]*"; System.out.println(test.matches(pattern2)); //true
Таким образом, часть
(\\W)*(\\S)*
в вашем первом регулярном выражении соответствует пустой строке, поскольку*
означает ноль или более вхождений, а настоящая строка соответствуетUser Comments:
и не вся строка, как и следовало ожидать. Вторая неудачна, поскольку она пытается сопоставить всю строку, но не может, поскольку\\W
соответствует символу без слова, т. Е.[^a-zA-Z0-9_]
, а первый символ -T
, символ слова.
MathJax не будет обрабатывать математику, содержащую HTML-теги (кроме нескольких избранных), поэтому вы не сможете выполнять такие замены внутри выражения, как вы пытаетесь сделать здесь.
Тем не менее, вы можете использовать сам MathJax для обработки межстраничной подкладки, которую, я думаю, вы пытаетесь выполнить. Вот один из подходов:
<script type="text/x-mathjax-config">
(function () {
//
// The values from MathJax.Extensions["TeX/AMSmath"].labels
// on all the linked pages.
//
var labels = {
xyz2: {tag: "2", id: "mjx-eqn-xyz2"}
};
//
// Maps tag IDs to pages on which they occur.
//
var urls = {
"mjx-eqn-xyz2": "link-cross-page2.html"
};
//
// Add the labels for the other pages when AMSmath is loaded.
//
MathJax.Hub.Register.StartupHook("TeX AMSmath Ready", function () {
var keys = Object.keys(labels);
for (var i = 0, m = keys.length; i < m; i++) {
MathJax.Extension["TeX/AMSmath"].labels[keys[i]] = labels[keys[i]];
}
});
//
// Configure TeX to use the external page url rather than the base url
// if the id is on a different page.
//
MathJax.Hub.Config({
TeX: {
equationNumbers: {
formatURL(id, base) {
return (urls[id] || base) + '#' + id;
}
}
}
});
})();
</script>
Поместите это перед сценарием, который загружает сам MathJax.js. Вам нужно будет собрать данные из MathJax.Extension["TeX/AMSmath"].labels
со всех страниц, на которые вы хотите сослаться, и поместить их в var labels
выше (объединить данные со всех страниц в один объект) и создать отображение из идентификаторов на страницу URL в var urls
выше. В этом примере в файле link-cross-page2.html
содержится \label{xyz2}\tag{2}
, и любой \ref{xyz2}
на странице, содержащей этот код, будет ссылаться на link-cross-page2.html#mjx-eqn-2
.
Остальная часть кода просто копирует ваши метки в список меток AMSmath, когда он загружается, и настраивает функцию formatURL()
TeX для поиска файла в вашем списке и использования его, если он существует, в противном случае он использует базовый URL страницы.
Обратите внимание, что для этого требуется, чтобы номера уравнений были разными на разных страницах, но я предполагаю, что это так, иначе вы не могли бы сказать, на какую страницу ссылаться.