Tag: 正则表达式

使用Scanner类解析字符串

我试图解析一些行并检查它们的值,例如在字符串中: ” 1 ON OFF”; 我要检查是否: 第一个字符是空白的。 第二个字符是int。 第三个字符是空白的。 第四个字符是2个字符,它是ON。 第五个字符是空白的。 第六个字符是3个字符,它是OFF。 我可以一次性使用正则表达式,但我想要的是每次检查后我必须显示是否正确: System.out.println(“1st character is not a blank : incorrect”); System.out.println(“1st character is blank : correct”); 我想过为此使用Scanner类,但是当我尝试检测第一个字符时,它为字符串显示1而不是空白, ” 1 ON OFF”; public class NewClass { public void StringExample(){ String str = ” 1 ON OFF”; Scanner sc = new Scanner(str); System.out.println(sc.next()); } public static […]

模式匹配使用贪婪和不情愿

在java regex我读过有关Greedy和Reluctant Quantifiers的内容 。 他们提到了 一个不情愿或“非贪婪”的量词首先尽可能少地匹配。 所以。*首先匹配任何内容,使整个字符串无法匹配 在这个例子中 来源: yyxxxyxx 模式: .*xx 贪心量词*并产生 0 yyxxxyxx 不情愿的资格赛*? ,我们得到以下内容: 0 yyxx 4 xyxx 为什么yxx , yxx结果不可能,即使它是可能的最小值?

捕获未跟随某些数字的数字流

我想捕获一些未跟随某些数字的数字流。 例如 input = abcdef lookbehind 123456….. asjdnasdh lookbehind 789432 我想使用负向前瞻捕获789432而不是123。 我试过(?<=lookbehind )([\d])+(?!456)但它捕获了123456和789432 。 使用(?<=lookbehind )([\d])+?(?!456)仅捕获1和7 。 分组不是我的选择,因为我的用例不允许我这样做。 有什么方法可以使用纯正则表达式捕获789432而不是123吗? 对答案的解释表示赞赏。

以任何顺序匹配可选捕获组

在解析用户输入时存在许多情况,其中用户有机会向输入添加若干可选标志,这些标志应该以任何顺序被接受。 如何使用正则表达式对其进行解析,以便每个标志位于其自己的捕获组中(如果存在)? 例如: 有一个必需的令牌a ,然后是3个可选的令牌,它们可以按任何顺序排列b , c和d 。 一些可接受的输入将是: a ab ac abc acb abcd adbc acdb 捕获组应始终如下所示: 0 => (anything, this is ignored) 1 => a 2 => b or null 3 => c or null 4 => d or null 这个问题有几个部分已经得到解答: 使用(…)? 表单以使捕获组可选 使用先行(?=.*b)(?=.*c)(?=.*d)允许事物处于任何顺序 但这些策略的组合不起作用: (a)(?=.*(b)?)(?=.*(c)?)(?=.*(d)?) Regex101测试 正则表达式允许以任何顺序找到可选令牌? (答案可以使用任何风格的正则表达式)

从字符串中提取子字符串

我的字符串( MY_STRING )的内容可以采用以下格式: bla bla…this is the id of product bla bla:#31 5 2 0000 12please verify bla bla … 要么 bla bla…this is the id of product bla bla: #31 5 2 0000 12, please verify bla bla… 要么 bla bla…this is the id of product bla bla: #31 5 2 0000 12 please […]

Java Regex引擎崩溃

正则表达式 – ([^=](\\s*[\\w-.]*)*$) 测试字符串 – paginationInput.entriesPerPage=5 Java Regex引擎崩溃/历时(> 2分钟)找到匹配项。 以下测试输入不是这种情况: paginationInput=5 paginationInput.entries=5 我的要求是获取= 右侧的字符串并用某些东西替换它。 除了上面提到的输入之外,上述模式正在做得很好。 我想了解错误的原因以及如何针对我的要求优化正则表达式以避免其他特殊情况。

如何仅从文本中删除标签?

问候所有,我有一个文本可能包含标签,如: hello this is a link https://stackoverflow.com/questions/4614567/how-to-remove-the-a-tags-only-from-a-text/www.google.com please visit it. 我想删除这些标签并将它们保持在它们之间: hello this is a link https://stackoverflow.com/questions/4614567/how-to-remove-the-a-tags-only-from-a-text/www.google.com please visit it. , 怎么做 ?

在Java中使用\ b Boundary Matcher

我正在阅读Oracle文档中的Boundary Matcher 。 我理解大部分内容,但我无法掌握\b边界匹配器。 以下是文档中的示例。 要检查模式是否在单词边界上开始和结束(与较长字符串中的子字符串相对),只需在任一侧使用\ b; 例如,\ bdog \ b 输入你的正则表达式:\ bdog \ b输入要搜索的输入字符串:狗在院子里玩。 我发现文本“dog”从索引4开始,到索引7结束。 输入你的正则表达式:\ bdog \ b输入要搜索的输入字符串:小狗在院子里玩。 找不到匹配项。 要匹配非单词边界上的表达式,请使用\ B代替: 输入你的正则表达式:\ bdog \ B输入要搜索的输入字符串:狗在院子里玩。 找不到匹配项。 输入你的正则表达式:\ bdog \ B输入要搜索的输入字符串:小狗在院子里玩。 我发现文本“dog”从索引4开始,到索引7结束。 总之,我无法理解\ b的工作。 有人可以帮助我描述它的用法,并帮助我理解这个例子。 谢谢

简单算术字符串的正则表达式

我正在尝试validation一个简单的算术表达式,以确保它适合格式操作数运算符操作数:234.34 + 5.我想出如何轻松validation这一点,但我希望用户能够继续输入2个以上的值如:234.34 + 5/6 * 7 – -34。 到目前为止我的正则表达式如下: [-]*\d+[.\d+[E\d+]*]*[\s+[*+/-]\s+[-]*\d+[.\d+[E\d+]*]*]* 这部分有效,但我遇到的问题是它允许一些我不想要的奇怪的东西,如-4.34.1 – 34 + 有什么建议么?

为什么我的正则表达式不匹配?

我在文本文件中有一些这样的行: ==Text== 我试图匹配开始,使用这个: line.matches(“^==[^=]”) 但是,这会为每一行返回false …一点帮助?