2010-03-03 5 views
3

Я не знаю регулярного выражения вообще. Может ли кто-нибудь помочь мне с одним очень простым регулярным выражением, которое есть,Регулярное выражение для совпадения пар слов, соединенных двоеточиями

извлечение 'слово: слово' из предложения. например, «Учебное пособие по Java Формат: Pdf С Расположение: Токио Javascript"?

  • Маленькая модификация: первое слово «из», но второе - это что угодно. «word1 in [ABC, FGR, HTY]»
  • Ребята ситуация требует немного больше модификация. Соответствующая форма может быть «word11: word12 word13 ..» до следующего «word21: ...».

вещи становятся сложными втор ..... я должен узнать рег ех :(

заранее спасибо

ответ

5

Вы можете использовать регулярное выражение:.

\w+:\w+ 

Объяснение:
\w - одиночный знак, который является либо буквой (в верхнем регистре, либо строчной буквой), цифрой или _.
\w+ - один или несколько вышеуказанных символов ...

\w+:\w+ соответствует двум словам, разделенным двоеточием.

2

Пробег: \b(\S+?):(\S+?)\b. Группа 1 возьмет «Формат» и группу 2 «Pdf».

Рабочий пример:

<html> 
<head> 
<script type="text/javascript"> 
function test() { 
    var re = /\b(\S+?):(\S+?)\b/g; // without 'g' matches only the first 
    var text = "Java Tutorial Format:Pdf With Location:Tokyo Javascript"; 

    var match = null; 
    while ((match = re.exec(text)) != null) { 
     alert(match[1] + " -- " + match[2]); 
    } 

} 
</script> 
</head> 
<body onload="test();"> 

</body> 
</html> 

Хорошая ссылка для регулярных выражений является https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/RegExp

+0

+1 для полного примера, но -1 для регулярного выражения, которое слишком сложно для собственного блага. ;) –

-2
([^:]+):(.+) 

Значение: (все, кроме: один или несколько раз),:, (любой символ, один рудный больше времени)

Вы найдете хорошие руководства в сети ... Возможно, вам пора узнать ...

+0

Не работает: возьмите этот простой ввод: «ab cd: ef gh» вы будете сопоставлять «ab cd» и «ef gh» вместо «cd» и «ef» – codaddict

+0

Это регулярное выражение очень неверно, вы можете хорошо используйте руководства. –

+0

Не понял, извините. Но regexp работает, и вам просто нужно настроить его следующим образом: ([^: \ s] +): ([^ \ s] +) – Macmade

1

Используйте этот фрагмент кода:

 
$str=" this is pavun:kumar hello world bk:systesm" ; 
if (preg_match_all ('/(\w+\:\w+)/',$str ,$val)) 
{ 
print_r ($val) ; 
} 
else 
{ 
print "Not matched \n"; 
} 
-1

вот не регулярное выражение образом, в вашем любимом языке, разделение на белых пространств, пройти через элемент, проверьте «:», печатать их, если найден. Например, Python

>>> s="Java Tutorial Format:Pdf With Location:Tokyo Javascript" 
>>> for i in s.split(): 
...  if ":" in i: 
...   print i 
... 
Format:Pdf 
Location:Tokyo 

Вы можете сделать дополнительные проверки, чтобы убедиться, что его на самом деле «someword: someword», снова разделив на «:» и проверить, есть ли 2 элемента в расщепленным списке.например

>>> for i in s.split(): 
...  if ":" in i: 
...   a=i.split(":") 
...   if len(a) == 2: 
...    print i 
... 
Format:Pdf 
Location:Tokyo 
1

функция сохраняющейся Jau с вашим дополнительным требованием:

function test() { 
    var words = ['Format', 'Location', 'Size'], 
      text = "Java Tutorial Format:Pdf With Location:Tokyo Language:Javascript", 
      match = null; 
    var re = new RegExp('(' + words.join('|') + '):(\\w+)', 'g'); 
    while ((match = re.exec(text)) != null) { 
     alert(match[1] + " = " + match[2]); 
    } 
} 
0

я в настоящее время решения этой проблемы в моем nodejs приложения и обнаружил, что это то, что я думаю, подходит для толстой кишки парные формулировок:

([\w]+:)("(([^"])*)"|'(([^'])*)'|(([^\s])*)) 

Он также соответствует приведенной стоимости. как a:"b" c:'d e' f:g

Пример кодирования в ES6:

const regex = /([\w]+:)("(([^"])*)"|'(([^'])*)'|(([^\s])*))/g; 
const str = `category:"live casino" gsp:S1aik-UBnl aa:"b" c:'d e' f:g`; 
let m; 

while ((m = regex.exec(str)) !== null) { 
    // This is necessary to avoid infinite loops with zero-width matches 
    if (m.index === regex.lastIndex) { 
     regex.lastIndex++; 
    } 

    // The result can be accessed through the `m`-variable. 
    m.forEach((match, groupIndex) => { 
     console.log(`Found match, group ${groupIndex}: ${match}`); 
    }); 
} 

Пример кодирования в PHP

$re = '/([\w]+:)("(([^"])*)"|\'(([^\'])*)\'|(([^\s])*))/'; 
$str = 'category:"live casino" gsp:S1aik-UBnl aa:"b" c:\'d e\' f:g'; 

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0); 

// Print the entire match result 
var_dump($matches); 

Вы можете проверить/проверить свои регулярные выражения выражения с помощью этого онлайн-инструмент: https://regex101.com

Btw, если не удаляется regex101.com, вы можете просмотреть этот пример кода here

Смежные вопросы