Regex 如何找到所有以a | b开头并以a | b结尾的单词。(例如:“;副词”;和“;巴拉莱卡”;)

Regex 如何找到所有以a | b开头并以a | b结尾的单词。(例如:“;副词”;和“;巴拉莱卡”;),regex,perl,Regex,Perl,下面的perl程序编写了一个正则表达式来满足我的需要。但是,这也会捕获字符串中显示的结果。如何仅获取由空格/换行符/制表符分隔的字符串 我使用的测试数据如下所示: 使用严格; 使用警告; 子打印\u a\u b{ 我的$file=shift; $pattern=qr/(a | b | a | b)\S*(a | b | a | b)/; 打开我的$fp$文件; 我的$cnt=0; while(我的$line=){ 如果($line=~$pattern){ 打印$行; $cnt=$cnt+1;

下面的perl程序编写了一个正则表达式来满足我的需要。但是,这也会捕获字符串中显示的结果。如何仅获取由空格/换行符/制表符分隔的字符串

我使用的测试数据如下所示:

使用严格;
使用警告;
子打印\u a\u b{
我的$file=shift;
$pattern=qr/(a | b | a | b)\S*(a | b | a | b)/;
打开我的$fp$文件;
我的$cnt=0;
while(我的$line=){
如果($line=~$pattern){
打印$行;
$cnt=$cnt+1;
}
}
打印$cnt;
}
在ARGV上打印a_b;

<代码> > p>你可以考虑使用< /p> 这将有助于仅在单词之后和之前应用regexp

 \b(a|b|A|B)\S*(a|b|A|B)\b
更简单,如补充所述:


(使用)

如果同一行中有多个单词,则可以在正则表达式中使用单词边界,如下所示:

(?i)\b[ab][a-z]*[ab]\b

模式代码为:

$pattern = /\b[ab][a-z]*[ab]\b/i;
但是,如果要检查只有单词的行,则可以使用:

(?i)$[ab][a-z]*[ab]$
(?i)\b(.)[a-z]*\1\b
更新:对于以相同字符*开头和结尾的注释*行,可以使用以下正则表达式:

(?i)\b([a-z])[a-z]*\1\b
但是,如果您想要任何字符,而不是像上面那样的字母,您可以使用:

(?i)$[ab][a-z]*[ab]$
(?i)\b(.)[a-z]*\1\b

KISS
(?i)\b[ab]\S*[ab]\b
更清晰的形式
(?i)(?,“我怎么能只得到用空格/换行符/制表符分隔的字符串?”@AvinashRaj我总是尽量避免第一眼(正面、负面),但这取决于源材料,它是有意义的。显然,至少不涉及回溯。嗨@AvinashRaj:谢谢你的回复。它到底是如何工作的?@saint1729在这个网站上测试两个正则表达式。你应该找到区别。有没有通用的方法来找到所有以相同字符开头和结尾的行?不只是“a”或“b”@saint1729使用。
\b([ab])\S*\1\b
@saint1729我已经用正则表达式更新了答案,供您评论