我想寫一個正則表達式匹配所有出現的指定字,但不能有任何字母數字字符前綴或後綴。前後沒有字母數字字符
例如,搜索術語「貓」不應該返回像「催化劑」這樣的術語。
這是我到目前爲止有:
"?<!([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