正则表达式:正好搜索3个大写字母

时间:2017-11-05 08:24:30

标签: regex

我正在使用https://pythex.org/来测试以下内容:

我想搜索下面的测试字符串,选择所有具有三个大写字母的连续字符。

测试字符串:bcAc BBGFeQFFJaaBx EBBcDDD

[A-Z]{3}返回包含3个大写字符的所有组,甚至包含4个大写字符的组。我试图使用^[A-Z]{3}$仅强制使用3个大写字母,但这也不起作用。

在上面的字符串中,我只希望EBBDDD匹配。

3 个答案:

答案 0 :(得分:2)

使用否定的外观:

$order['array'] = json_decode($_POST['dataitems'],true);

Live demo

答案 1 :(得分:0)

不确定这是否是最佳解决方案,但我使用了负面的外观和前瞻,以确保三字母位前面或后面没有大写字母。

(?<![A-Z])[A-Z]{3}(?![A-Z])

答案 2 :(得分:0)

如果只想匹配三个大写字母(如EBBDDD),那么考虑哪个字符< /em> 或 after 三个大写字母的组。

[^A-Z] 表示“正好是一个不是大写字母的字符。”

因此以下两件事是等价的:

<头>
正则表达式 英语
[^A-Z][A-Z]{3}[^A-Z] (1) 一件事不是大写字母 (2) 三个大写字母 (3) 一件事不是大写字母

对于表格内编号列表的格式,我深表歉意。
stackoverflow 支持表外的编号列表,但不支持表内。
我不知道为什么。此外,您不能在 stackoverflow 表中插入手动换行符。

无论如何,我们的正则表达式仍然不理想。

<头>
一般问题 问题示例
捕获非大写字母。 如果您在字符串 xxxxxbAAAbxxxxx 内搜索,则输出可能包含 bAAAb 而不是 AAA
字符串的开头和结尾是个问题 如果您在 AAAxxxxBBBxxx 内搜索,我们会找到 BBB 而不是 AAA

一种解决方案如下:

(?:^|[^A-Z])([A-Z]{3})(?:[^A-Z]|$)

考虑文本 John Doe.......303-159-8712......jdoe@gmail.com.......Contractor

  • 我们希望删除点(...)。
  • 我们希望保持 John Doe303-159-8712 等等...

什么是捕获组?

  • 一个捕获组将文本标记为“保留我”
  • 非捕获组将文本标记为“删除我”
<头>
正则表达式 英语
| 竖竖线字符类似于英文单词“or
^ 文本的开头(左端)
$ 文本的结尾(字符串的最右端)
[A-Z] 从 A 到 Z 的一个大写字母
[^A-Z] A 到 Z 字母以外的一个字符
[^A-Z]|$ 除 A 到 Z 的字母或文本结尾之外的一个字符
^|[^A-Z] 字符串开头
(?:[^A-Z]|$) 问号冒号 (?:) 表示这是我们要删除/忽略的一段文本。文本块只包含一件事。唯一的东西要么是行尾,要么是大写字母以外的一个字符。

你可以测试一下here