Java 正则表达式,带“lookbehind/lookahead”的*&引用;
这个字后面必须留有空格Java 正则表达式,带“lookbehind/lookahead”的*&引用;,java,regex,Java,Regex,这个字后面必须留有空格 像这样的词也必须被接受 如果单词像\gloss{word}、\(这里的任何东西)sezione{word}、\gloss{anything单词任何东西),\(这里的任何东西)sezione{anything单词任何东西},就不能使用它。 如果单词内部类似\(除光泽或sezione以外的任何东西){单词}和\{除光泽或sezione以外的任何东西){strings单词字符串},则必须将其取下。 很明显,一个词,一个词,一个词,一个词都不能用 (粗体字已被取下,字未被取下)
像这样的词也必须被接受
如果单词像\gloss{word}、\(这里的任何东西)sezione{word}、\gloss{anything单词任何东西),\(这里的任何东西)sezione{anything单词任何东西},就不能使用它。
如果单词内部类似\(除光泽或sezione以外的任何东西){单词}和\{除光泽或sezione以外的任何东西){strings单词字符串},则必须将其取下。
很明显,一个词,一个词,一个词,一个词都不能用 (粗体字已被取下,字未被取下) 我很难抓住“{….单词….}”中的单词 到目前为止,我的猜测是,
(?),我会在lookback和lookahead((?)上添加一个“*”,但是像这样它就停止工作了
如果这有关系,我计划使用Java的正则表达式引擎
提前谢谢
编辑:主要问题是
\(这里的任何内容)sezione{anythionwordanythion}
如果我不能得到这个,这应该可以解决整个问题让我们为您的用例设置一些硬事实:
Java(和大多数)正则表达式引擎不支持可变长度查找
Java正则表达式引擎不支持允许您重置搜索的\K
模式
如果没有这一点,您将需要使用一个变通方法,该方法分为3个步骤:
确保输入与预期的查找模式匹配
如果确实如此,则通过查找模式删除匹配的字符串
在替换的字符串中,匹配并提取搜索模式
考虑以下代码:
String str = "(anything here)sezione{anything word anything}";
// look behind pattern
String lookbehind = "^.*?(?:sezione|gloss|word)\\{";
// make sure input is matching lookbehind pattern first
if (str.matches(lookbehind + ".*$")) {
// actual search pattern
Pattern p = Pattern.compile("[^}]*?\\b(word)\\b");
// search in replaced String
Matcher m = p.matcher(str.replaceFirst(lookbehind, ""));
if (m.find())
System.out.println(m.group(1));
//> word
}
PS:您可能需要通过检查输入字符串中作为搜索模式起点的索引来改进代码。java的lookback实现(afaik)是固定宽度,即您必须规定要向后看的确切字符数。向前看不是固定宽度,因此我不能使用。*在向后看中:cNo您不能。您只能使用?
:(