我想写一个正则表达式匹配所有出现的指定字,但不能有任何字母数字字符前缀或后缀。前后没有字母数字字符
例如,搜索术语“猫”不应该返回像“催化剂”这样的术语。
这是我到目前为止有:
"?<!([a-Z0-9])*?TERMPLACEHOLDER?!([a-Z0-9])*?"
这应该自行返回单词“TERMPLACEHOLDER”。
任何想法?
谢谢。
我想写一个正则表达式匹配所有出现的指定字,但不能有任何字母数字字符前缀或后缀。前后没有字母数字字符
例如,搜索术语“猫”不应该返回像“催化剂”这样的术语。
这是我到目前为止有:
"?<!([a-Z0-9])*?TERMPLACEHOLDER?!([a-Z0-9])*?"
这应该自行返回单词“TERMPLACEHOLDER”。
任何想法?
谢谢。
如何:
\bTERMPLACEHOLDER\b
你可以使用单词边界:\bTERMPLACEHOLDER\b
快速测试在Javascript:
var a = "this cat is not a catalyst";
console.log(a.match(/\bcat\b/));
仅返回 “猫”。
你可能会寻找word boundaries。从那里,你可以,如果你想让它当你说“字”指的你想找到一个字符串匹配的谐音
Search for any word containing "MYWORD"
\b\w*?MYWORD\w*?\b
Search for any word ending in "ING"
\b\w*?ING\b
Search for any word starting with "TH"
\bTH\w*?\b
要当心在单词的两端使用像\w*?
通配符。在正则表达方面,“词”有不同的含义,它是一个人物类。
定义你想查找的'literal'字符串(不是单词)。这可以是任何东西,句子,标点符号,换行符组合。例子“找到这个\精确短语<>!abc”。
由于这将是正则表达式(而不是整个正则表达式)的一部分,因此您可以转义可能嵌入的特殊正则表达式元字符。
string = 'foo.bar' // the string you want to find
string =~ s/[.*+?|()\[\]{}^\$\\]/\\$&/g // Escape metachars
现在,'literal'字符串已准备好插入到正则表达式中。请注意,如果您想单独允许类或想要字符串中的元字符,则必须自己解决此问题。
sample =~ /(?<![^\W_])$string(?![^\W_])/ig // Find the string globally
(expanded)
/
(?<![^\W_]) # assertion: No alphanumeric character behind us
$string # the 'string' we want to find
(?![^\W_]) # assertion: No alphanumeric character in front of us
/ig
Perl的样本 -
use strict;
use warnings;
my $string = 'foo.bar';
my $sample = 'foo.bar and !fooAbar and afoo.bar.foo.bar';
# Quote string metacharacters
$string =~ s/[.*+?|()\[\]{}^\$\\]/\\$&/g;
# Globally find the string in the sample target
while ($sample =~ /(?<![^\W_])$string(?![^\W_])/ig)
{
print substr($sample, 0, $-[0]), "-->'",
substr($sample, $-[0], $+[0] - $-[0]), "'\n";
}
输出 -
-->'foo.bar'
foo.bar and !fooAbar and afoo.bar.-->'foo.bar'
你或许应该用[A-ZA-Z0-9]。我不认为a-Z会有理想的行为。 ^会否定字符列表。所以你可能想尝试类似“/ [^ a-zA-Z0-9](TERMPLACEHOLDER)[^ a-zA-Z0-9] /” – Gerben 2011-01-14 16:42:04